1 import java.awt.*;
2 import java.awt.event.*;
3 import java.io.IOException;
4 import java.net.*;
5 import org.apache.log4j.Logger;
6 /**
7 * 简单聊天室
8 * The class <code>Chat</code>
9 *
10 * @author tongbo
11 * @version 1.0
12 */
13 public class Chat extends Frame{
14 /**
15 *
16 */
17 private static final long serialVersionUID = 3139498857930944585L;
18 private static final Logger LOGGER = Logger.getLogger(Chat.class);
19 //定义只显示六行,多出会出现滚动条
20 List list = new List(6);
21 //定义ip地址的长度最长为15位
22 TextField tfIP = new TextField(15);
23 //文本消息输入框
24 TextField tfData = new TextField(20);
25 DatagramSocket ds = null;
26 public Chat(){
27 try {
28 ds = new DatagramSocket(3000);
29 } catch (SocketException e) {
30 LOGGER.debug(e);
31 }
32
33 this.add(list,"Center");
34 Panel panel = new Panel();
35 this.add(panel,"South");
36
37 panel.setLayout(new BorderLayout());
38 panel.add(tfIP,"West");
39 panel.add(tfData,"East");
40
41 new Thread(new Runnable() {
42
43 @Override
44 public void run() {
45 byte[] buf = new byte[1024];
46 DatagramPacket dp = new DatagramPacket(buf, buf.length);
47 LOGGER.debug("thread start......");
48 while(true){
49 try {
50 ds.receive(dp);
51 LOGGER.debug("---"+new String(/*dp.getData()*/buf,0,dp.getLength())+" from "+
52 dp.getAddress().getHostAddress()+":"+dp.getPort());
53 //将消息字符串放置到0位置,即最上边
54 list.add(new String(/*dp.getData()*/buf,0,dp.getLength())+" from "+
55 dp.getAddress().getHostAddress()+":"+dp.getPort(),0);
56 } catch (IOException e) {
57 if(!ds.isClosed()){
58 LOGGER.debug(e);
59 }
60 }
61 }
62 }
63 }).start();
64
65 tfData.addActionListener(new ActionListener() {
66
67 @Override
68 public void actionPerformed(ActionEvent e) {
69 byte[] buf;
70 buf = tfData.getText().getBytes();
71 try{
72 LOGGER.debug("ip:"+tfIP.getText());
73 DatagramPacket dp = new DatagramPacket(buf, buf.length,
74 InetAddress.getByName(tfIP.getText()),3000);
75 ds.send(dp);
76 }catch (Exception e1) {
77 LOGGER.debug(e1);
78 }
79 tfData.setText("");
80 }
81 });
82 addWindowListener(new WindowAdapter() {
83
84 @Override
85 public void windowClosing(WindowEvent e) {
86 ds.close();
87 dispose();
88 System.exit(0);
89 }
90 });
91 }
92 /**
93 * @param args
94 */
95 public static void main(String[] args) {
96 LOGGER.debug("chat start.....");
97 Chat mainFrame = new Chat();
98 mainFrame.setSize(300,400);
99 mainFrame.setTitle("chat room");
100 mainFrame.setVisible(true);
101 mainFrame.setResizable(false);
102 }
103 }