解决方案 »

  1.   

    有点长,代码如下:
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;public class Chat extends Frame{
        
        private List list=null;
        private Panel panel=null;
        private TextField tfIp=null,tfData=null;
        private DatagramSocket ds=null;
        public Chat()
        {
           try
           {
              ds=new DatagramSocket();/ /这里如果不加端口号,为什么就接收不了,
        我想问发送不是已经指定数据包的地址和端口了吗?
           }
           catch(Exception e)
           {
              e.printStackTrace();
           }
           setTitle("聊天室");
           setBounds(300,150,300,400);
           init();
           setVisible(true);
        
          addWindowListener(new WindowAdapter()
          {
           public void  windowClosing(WindowEvent we)
           {
           ds.close();
           dispose();
           System.exit(0);
           }
          }
          );
        }
        public void init()
        {
         list=new List(6);
         add(list,"Center");
         panel=new Panel();
         panel.setLayout(new BorderLayout());
         tfIp=new TextField(15);
         tfData=new TextField(18);
             new Thread(new Runnable()
              {
                 public void run()
                 {
                  byte buf=new byte;
                  DatagramPacket dp=new DatagramPacket(buf,buf.length);
                 
                 
                    while(true)
                     {
                     
                    try
                         {
                           ds.receive(dp);
                           String message=new String(buf,0,dp.getLength());
                           message+="from"+dp.getAddress().getHostAddress()+":"+dp.getPort();
                         list.add(message,0);
                     }
                     catch(Exception ex)
                         {
                          if(!ds.isClosed())
                          ex.printStackTrace();
                         } 
                  }
                   
                 }
            }).start();
        
         tfData.addActionListener(new ActionListener()
         {
         public void actionPerformed(ActionEvent e)
         {
         String strIp=tfIp.getText().toString();
         String strData=tfData.getText().toString();
         try
         {
         DatagramPacket dp=new DatagramPacket(strData.getBytes(),strData.getBytes().length,InetAddress.getByName(strIp),1029);
         ds.send(dp);
        
         }
         catch(Exception ex)
         {
         ex.printStackTrace();
         }
         tfIp.setText("");
         tfData.setText("");
         }
         }
         );
         panel.add(tfIp,"West");
         panel.add(tfData,"East");
         add(panel,"South");
        
        }
        public static void main(String args) {
         new Chat();
        }
    }