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 }