◆用UDP编写网络聊天程序

/**
 * @(#)Chat1.java
 *
 * Chat1 application
 *
 * @author
 * @version 1.00 2007/1/29
 */
 import java.awt.List;
 import java.awt.*;
 import java.awt.event.*;
 import java.net.*;
 import java.util.*;
public class Chat1 extends Frame
{
 List lst=new List(6);
 TextField tfIP=new TextField(15);
 TextField tfData=new TextField(20);
 DatagramSocket ds=null;
    public Chat1()
    {
     this.addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       ds.close();
       e.getWindow().dispose();
       System.exit(0);
      }
     });
     Panel pl=new Panel();
     pl.setLayout(new BorderLayout());
     pl.add(tfIP,BorderLayout.WEST);
     pl.add(tfData,BorderLayout.EAST);
     this.add(lst,BorderLayout.CENTER);
     this.add(pl,BorderLayout.SOUTH);
     
     try
     {
    ds=new DatagramSocket(3000);
     }
     catch(Exception e)
     {
      e.printStackTrace();
     }
     
     new Thread(new Runnable()
     {
      public void run()
      {
       byte []buf=new byte [1024];
       DatagramPacket dp=new DatagramPacket(buf,1024);
       while(true)
       {
        try
        {
         ds.receive(dp);
         Calendar c=Calendar.getInstance();
         lst.add(new String(dp.getData(),0,dp.getLength())+"    from: "+
          dp.getAddress().getHostAddress()+":"+dp.getPort()+new Date(),0); 
        }
        catch(Exception e)
        {
         if(ds.isClosed()==false)
         {
          e.printStackTrace();
         } 
        } 
       }
      }
     }).start();
     
     tfData.addActionListener(new ActionListener()
     {
      public void actionPerformed(ActionEvent e)
      {
       byte []buf=tfData.getText().getBytes();
       try
       {
        DatagramPacket dp=new DatagramPacket(buf,buf.length,
         InetAddress.getByName(tfIP.getText()),3000);
        ds.send(dp);
       }
       catch(Exception ex)
       {
        ex.printStackTrace();
       }
       //lst.add(tfData.getText());
       tfData.setText("");
       
      }
     });
     
     
    }
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     Chat1 mainFrame=new Chat1();
     mainFrame.setTitle("Chat");
     mainFrame.setBounds(300,200,300,400);
     mainFrame.setVisible(true);
     mainFrame.setResizable(false);
    }
}

posted on 2007-01-29 20:31 大头剑客 阅读(292) 评论(0)  编辑  收藏 所属分类: 学习笔记


只有注册用户登录后才能发表评论。


网站导航:
 
<2025年2月>
2627282930311
2345678
9101112131415
16171819202122
2324252627281
2345678

导航

统计

公告

写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱;
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年;
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员;
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员.
不管前面是地雷阵还是万丈深渊,
我都将勇往直前,义无反顾,
鞠躬尽瘁,死而后已。
—— 朱镕基总理

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

学习园地

最新随笔

搜索

积分与排名

最新评论