package javanet;
import java.awt.*;
import javax.swing.*;
import javax.swing.DefaultComboBoxModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import java.io.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
public class Talk
extends JFrame implements Runnable{
JOptionPane prompt=new JOptionPane();
DatagramSocket socket;
DatagramPacket packet;
DatagramSocket sendsocket;
byte buf[]=new byte[512];
InetAddress addr=null;
String words;
DefaultComboBoxModel model=new DefaultComboBoxModel();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
JScrollPane jScrollPane2 = new JScrollPane();
JTextArea jTextArea2 = new JTextArea();
JLabel jLabel1 = new JLabel();
ImageIcon icon=new ImageIcon(Talk.class.getResource("1.jpg"));
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JComboBox jComboBox1 = new JComboBox();
Object tempaddr;
int i=0;
JLabel jLabel2 = new JLabel();
boolean flag=true;
public Talk() {
try {
jbInit();
}
catch(BindException er){prompt.showMessageDialog(this,"端口被占用,不用开启服务","错误",0);jButton1.setEnabled(false);}
catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
setSize(new Dimension(410,370));
this.addWindowListener(new Talk_this_windowAdapter(this));
getContentPane().setLayout(null);
jScrollPane1.setBounds(new Rectangle(20, 10, 360, 140));
jTextArea1.setEditable(false);
jScrollPane2.setBounds(new Rectangle(20, 180, 360, 100));
jTextArea2.setText("");
jTextArea2.addKeyListener(new Talk_jTextArea2_keyAdapter(this));
jLabel1.setIcon(icon);
jLabel1.setBounds(new Rectangle(0, 150, 410, 30));
jButton1.setBounds(new Rectangle(223, 291, 67, 29));
jButton1.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
jButton1.setText("发送");
jButton1.addActionListener(new Talk_jButton1_actionAdapter(this));
jButton2.setBounds(new Rectangle(303, 291, 67, 29));
jButton2.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
jButton2.setText("关闭");
jButton2.addActionListener(new Talk_jButton2_actionAdapter(this));
jComboBox1.setEditable(true);
jComboBox1.setBounds(new Rectangle(86, 291, 91, 29));
jComboBox1.setModel(model);
jLabel2.setFont(new java.awt.Font("Dialog", Font.PLAIN, 13));
jLabel2.setText("发送地址:");
jLabel2.setBounds(new Rectangle(24, 291, 60, 29));
this.getContentPane().add(jScrollPane1);
this.getContentPane().add(jScrollPane2);
this.getContentPane().add(jLabel1);
this.getContentPane().add(jButton2);
this.getContentPane().add(jButton1);
this.getContentPane().add(jLabel2);
this.getContentPane().add(jComboBox1);
jScrollPane2.getViewport().add(jTextArea2);
jScrollPane1.getViewport().add(jTextArea1);
jScrollPane1.setWheelScrollingEnabled(true);
jScrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED );
socket=new DatagramSocket(8181);
new Thread(this).start();
this.setResizable(false);
setTitle("Press the KeyBoard,let the world listen to your voice!");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
this.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
}
public void run()
{
while(flag)
{
try
{
jTextArea2.grabFocus();
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
tempaddr=packet.getAddress().toString();
jTextArea1.setText(jTextArea1.getText()+"\n"+new getTime().time+" "+tempaddr+"对你说:\n"+new String(packet.getData()));
if(model.getIndexOf(tempaddr)==-1)
{
model.addElement(tempaddr.toString().replaceAll("/",""));
setTitle("新用户"+tempaddr+"向你发来消息");
}
}
catch (IOException ex) {}
}
}
public void send()
{
try {
addr=InetAddress.getByName(jComboBox1.getSelectedItem().toString());
words=jTextArea2.getText();
if(words.length()==0){return;}
sendsocket = new DatagramSocket();
packet=new DatagramPacket(words.getBytes(),words.getBytes().length,addr,8181);
sendsocket.send(packet);
jTextArea2.setText("");
jTextArea1.setText(jTextArea1.getText()+"\n"+new getTime().time+" "+"你对 "+addr+"说:\n"+words);
}
catch (Exception ex) {prompt.showMessageDialog(this,"未能发送消息到指定主机","发送失败",0);}
}
public void jButton1_actionPerformed(ActionEvent e) {
send();
}
public void jButton2_actionPerformed(ActionEvent e) {
flag=false;
this.dispose();
try{socket.close();}catch(Exception er){}
}
public void jTextArea2_keyPressed(KeyEvent e) {
if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {
send();
}
}
public void this_windowClosing(WindowEvent e) {
jButton2_actionPerformed((ActionEvent)jButton2.getAction());
}
}
class Talk_this_windowAdapter
extends WindowAdapter {
private Talk adaptee;
Talk_this_windowAdapter(Talk adaptee) {
this.adaptee = adaptee;
}
public void windowClosing(WindowEvent e) {
adaptee.this_windowClosing(e);
}
}
class Talk_jTextArea2_keyAdapter
extends KeyAdapter {
private Talk adaptee;
Talk_jTextArea2_keyAdapter(Talk adaptee) {
this.adaptee = adaptee;
}
public void keyPressed(KeyEvent e) {
adaptee.jTextArea2_keyPressed(e);
}
}
class Talk_jButton2_actionAdapter
implements ActionListener {
private Talk adaptee;
Talk_jButton2_actionAdapter(Talk adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class Talk_jButton1_actionAdapter
implements ActionListener {
private Talk adaptee;
Talk_jButton1_actionAdapter(Talk adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
我写的一个简单的聊天程序(加传送文件)
共43个文件
class:21个
java:10个
exe:2个
需积分: 9 54 下载量 160 浏览量
2007-12-27
15:29:41
上传
评论
收藏 550KB RAR 举报
温馨提示
这是用SOCKET写的一个程序,中间有一些小问题,大家可以自己改进改进
资源推荐
资源详情
资源评论
收起资源包目录
javaNet.rar (43个子文件)
javaNet
javaNetW.exe 211KB
javaNet-linux 179KB
javaNet.jar 69KB
bak
javanet
Scanhost.java~1~ 5KB
src
javanet
getTime.java 325B
Scanhost.java 5KB
Talk.java 6KB
startTCP.java 3KB
Test.java 502B
mainApp.java 1KB
mainFrame.java 5KB
recieveFile.java 119B
fileTS.java 2KB
scanScript.java 1KB
javaNet.jpx 4KB
javaNet-mac 180KB
javaNet.exe 211KB
javaNet.jpx.local~ 4KB
javaNet-solaris 164KB
classes
test
client.class 1KB
javanet
Scanhost_jButton1_actionAdapter.class 669B
Talk_jTextArea2_keyAdapter.class 601B
mainFrame_jButton3_actionAdapter.class 675B
Test.class 1KB
recieveFile.class 278B
startTCP.class 4KB
mainFrame_jButton1_actionAdapter.class 675B
Scanhost_jButton2_actionAdapter.class 669B
Talk_jButton2_actionAdapter.class 645B
mainFrame.class 6KB
scanScript.class 2KB
fileTS.class 3KB
1.jpg 25KB
getTime.class 804B
Talk_jButton1_actionAdapter.class 645B
mainApp.class 1KB
mainFrame$mainFrame_jButton2_actionAdapter.class 830B
Talk.class 8KB
mainApp$1.class 711B
Scanhost.class 6KB
Talk_this_windowAdapter.class 604B
package cache
javanet.dep2 24KB
javaNet.jpx.local 4KB
共 43 条
- 1
资源评论
mqxtiyca
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功