java -> UDP 多线程 的 客户端 和 服务器端

关闭任务管理器的 javaw 进程 可以 关闭之前 通过JAVA 编译 占用的端口 

服务器端

package main;

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
 
class M1
{
    public static void main(String[]a)
    {
    ChatGui c=new ChatGui();
    }
}
//定义聊天窗口
class ChatGui
{
    private Frame f;
    private TextArea t1;
    private TextArea t2;
    private Button b;
    private Thread th;
    ChatGui()
    {
        info();
    }
    public void info()
    {
 
         reThread();//开启接收线程
 
    }
   
    //线程
    public void reThread()
    {
          try
            {
              DatagramSocket recS=new DatagramSocket(10326);
              new Thread(new Rce(recS)).start();
             // DatagramSocket sendS=new DatagramSocket();
             // new Thread(new Sen(sendS)).start();
             
            }
           catch (Exception w)
             {
        	   throw new RuntimeException("创建线程失败");
             }
    }
 
class Rce implements Runnable
{
    private DatagramSocket ds;
    Rce(DatagramSocket ds)
    {
        this.ds=ds;
    }
    public void run()
    {
        try
        {
            while(true)
            {
                byte[] b=new byte[1024*64];
                DatagramPacket dp=new DatagramPacket(b,b.length); 
                ds.receive(dp); 
                String ip=dp.getAddress().getHostAddress();
                String data=new String(dp.getData(),0,dp.getLength());
                System.out.println(ip+"-----"+data);
            }
        }
        catch (Exception e)
	    {
	        throw new RuntimeException("接受失败");
	    }
    }
}
}

客户端

package main;

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
 
class M2
{
    public static void main(String[]a)
    {
    ChatGui2 c=new ChatGui2();
    }
}
//定义聊天窗口
class ChatGui2
{
    private Frame f;
    private TextArea t1;
    private TextArea t2;
    private Button b;
    private Thread th;
    ChatGui2()
    {
        info();
    }
    public void info()
    {
         f=new Frame("聊天,不匹配的端口");
         f.setBounds(300,100,500,600);
         f.setResizable(false);
         f.setLayout(new FlowLayout());
         f.setVisible(true);
         t1=new TextArea("",20,60,TextArea.SCROLLBARS_VERTICAL_ONLY);
         t1.setEditable(false);
         t2=new TextArea("",5,50,TextArea.SCROLLBARS_VERTICAL_ONLY);
         b=new Button("发送");
         f.add(t1);
         f.add(t2);
         f.add(b);
         myEvent();
      
 
    }
    public void myEvent()
    {
        f.addWindowListener(new WindowAdapter()
            {
                 public void windowClosing(WindowEvent e)
                   {
                       System.exit(0);
                   }
            });
        b.addActionListener(new ActionListener()
            {
                 public void actionPerformed(ActionEvent e)
                    {
                   seThread();
                   System.out.println(th.getName());//通过测试,这里每次点击发送按钮都会产生新的线程
                    }
            });
 
    }
    //线程
    
    public void seThread()
    {DatagramSocket sendS=null;
    System.out.println("xiancheng");
                          try
                          { 
                               t1.append("我说:"+"\r\n"+t2.getText()+"\r\n");
                             if(sendS==null)
                              sendS=new DatagramSocket();
                             
                               th=new Thread(new Sen(sendS));
                               th.start();  
                               System.out.println(th.isAlive());
                               } 
                               
                          
                          catch (Exception ew)
                           {
                              throw new RuntimeException("xiancheng失败");
                          }
                           
}
 
class Sen implements Runnable
{
    private DatagramSocket ds;
    Sen(DatagramSocket ds)
    {
        this.ds=ds;
    }
    public void run()
    {
        try
          {
         
         
             byte[] b=t2.getText().getBytes();
             System.out.println(t2.getText());
             System.out.println(b.length);
             DatagramPacket dp=new DatagramPacket(b,b.length,InetAddress.getByName("192.168.1.102"),60002);
             System.out.println(dp.getData());
       
             ds.send(dp);
        
            t2.setText("");
         
          }
        catch (Exception e)
          {
             throw new RuntimeException("发送失败");
          }
    }
}
  
}

猜你喜欢

转载自mft.iteye.com/blog/2297251