振兴

壁立千仞,无欲则刚

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  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 }

 

posted on 2013-04-09 22:22  振兴  阅读(640)  评论(0编辑  收藏  举报