黑马程序员 【】java学习之路——UDP之模拟聊天

来源:互联网 发布:美工设计流程规范 编辑:程序博客网 时间:2024/05/19 18:39

------- android培训、java培训、期待与您交流! ----------

需求:在DSO命令行简单模拟一个聊天程序

 思路:

1:有收数据的部分,和发数据的部分

2:这两部分需要同时运行。那就需要用到多线程技术。

3:一个线程控制收,一个线程控制发

4:因为收和发动作是不一致的,所以要定义两个run方法,而且这两个方法要封装到不同的类中

 
//发送端类
import java.net.*;
import java.io.*;
 class Send implements Runnable
{
       private DatagramSocket ds;
      Send(DatagramSocket ds)
      {
      this.ds = ds;
      }
     public void run()
     {
     try
     {
     //接收键盘输入
     BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
     while ((line = bufr.readLine())!=null)
    {
   if ("886".equals(line))
   {
    break;
   }
    byte [] buf = line.getBytes();
   DatagramPacket dp = 
   new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.104"),10002);
   ds.send(dp);
   }
}
catch (Exception e)
{
throw new RuntimeException("发送失败");
}
}
}
//接收端类
  class Rece implements Runnable
{
private DatagramSocket ds;
 Rece(DatagramSocket ds)
{
this.ds = ds;
}
public void run()
{
try
{
while (true)
{
byte [] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.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("接收失败");
}


}
}
public class  ChatDemo 
{
public static void main(String[] args) throws Exception
{
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receSocket = new DatagramSocket(10002);


new Thread(new Send(sendSocket)).start();
new Thread(new Rece(receSocket)).start();
}
}
0 0
原创粉丝点击