A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Cola 于 2014-1-14 20:18 编辑

用UDP写的聊天程序,接收类Rece接收不到port。传的是10010,Rece类中的port是-1,请问为什么呢?
  1. class Rece implements Runnable
  2. {
  3.         private DatagramSocket ds;
  4.         public Rece(DatagramSocket ds)
  5.         {
  6.                 this.ds=ds;
  7.         }
  8.         public void run()
  9.         {
  10.                 try
  11.                 {
  12.                         while(true)
  13.                         {
  14.                                 System.out.println("Rece");
  15.                                 System.out.println("port "+ds.getPort());
  16.                                 byte[] buf=new byte[1024];
  17.                                 DatagramPacket dp=new DatagramPacket(buf,buf.length);
  18.                                 
  19.                                 ds.receive(dp);
  20.                                 System.out.println("Receive dp");

  21.                                 String ip=dp.getAddress().getHostAddress();

  22.                                 String data=new String(dp.getData(),0,dp.getLength());
  23.                                 if("886".equals(data))
  24.                                 {
  25.                                         System.out.println(ip+"......离开聊天室");
  26.                                         break;
  27.                                 }
  28.                                 System.out.println(ip+"::"+data);
  29.                         }
  30.                 }
  31.                 catch (Exception e)
  32.                 {
  33.                         throw new RuntimeException("接收端失败");
  34.                 }
  35.         }
  36. }

  37. class ChatDemo2
  38. {
  39.         public static void main(String[] args) throws Exception
  40.         {
  41.                 //DatagramSocket sendSocket=new DatagramSocket();
  42.                 DatagramSocket receSocket=new DatagramSocket(10010);

  43.                 //new Thread(new Send(sendSocket)).start();
  44.                 new Thread(new Rece(receSocket)).start();
  45.         }
  46. }
复制代码



捕获.JPG (15.88 KB, 下载次数: 6)

运行结果

运行结果

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 淡定

查看全部评分

3 个回复

正序浏览
这是我刚写的,你看看对你有什么帮助没!
  1. import java.io.*;
  2. import java.net.*;
  3. class Send implements Runnable
  4. {
  5.         private DatagramSocket ds;
  6.         public Send(DatagramSocket ds)
  7.         {
  8.                 this.ds = ds;
  9.         }
  10.         public void run()
  11.         {
  12.                 try
  13.                 {
  14.                         BufferedReader bu = new BufferedReader(new InputStreamReader(System.in));
  15.                         String line = null;
  16.                         while((line =bu.readLine())!=null)
  17.                         {
  18.                                 if ("886".equals(line))
  19.                                         break;
  20.                                 byte[] bf = line.getBytes();
  21.                                 DatagramPacket dp
  22.      = new DatagramPacket(bf,bf.length,InetAddress.getByName("127.0.0.1"),10002);
  23.                                 ds.send(dp);
  24.                         }
  25.                         ds.close();
  26.                 }
  27.                 catch (Exception e)
  28.                 {
  29.                         throw new RuntimeException("发送失败");
  30.                 }
  31.         }
  32. }
  33. class Rece implements Runnable
  34. {
  35.         private DatagramSocket ds;
  36.         public Rece(DatagramSocket ds)
  37.         {
  38.                 this.ds = ds;
  39.         }
  40.         public void run()
  41.         {
  42.                 try
  43.                 {
  44.                         while(true)
  45.                         {
  46.                                 byte[] buf = new byte[1024];
  47.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length);
  48.                                 ds.receive(dp);
  49.                                 String ip = dp.getAddress().getHostAddress();
  50.                                 String data=new String(dp.getData(),0,dp.getLength());
  51.                                 int port = dp.getPort();
  52.                                 System.out.println(ip+"---"+data+"-----"+port);
  53.                         }
  54.                 }
  55.                 catch (Exception e)
  56.                 {
  57.                         throw new RuntimeException("接收失败");
  58.                 }
  59.         }
  60. }
  61. class ChatDemo
  62. {
  63.         public static void main(String[] args) throws Exception
  64.         {
  65.                 DatagramSocket sendSocket = new DatagramSocket();
  66.                 DatagramSocket receSocket = new DatagramSocket(10002);

  67.                 new Thread (new Send(sendSocket)).start();
  68.                 new Thread (new Rece(receSocket)).start();
  69.         }
  70. }
复制代码
回复 使用道具 举报
  1. class Rece implements Runnable
  2. {
  3.         private DatagramSocket ds ;
  4.         public Rece(DatagramSocket ds )
  5.         {
  6.                 this.ds = ds;
  7.         }
  8.        
  9.         public void run()
  10.         {
  11.                 try
  12.                 {
  13.                         while(true)
  14.                         {
  15.                                 byte[] buf = new byte[1024];

  16.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length);
  17.                                
  18.                                 ds.receive(dp);
  19.                                
  20.                                 String ip = dp.getAddress().getHostAddress();

  21.                                 String data = new String(dp.getData(),0,dp.getLength());

  22.                                 System.out.println("(" + ip + "):" + data);
  23.                         }
  24.                 }
  25.                 catch (Exception e)
  26.                 {
  27.                         throw new RuntimeException("接收失败");
  28.                 }

  29.         }
  30. }
  31. class ChatDemo
  32. {
  33.         public static void main(String[] args) throws Exception
  34.         {
  35.                 //创建Send 和 Rece 的DatagramSocket对象,并指定监听的端口。
  36.                 DatagramSocket senfDs = new DatagramSocket(6666);
  37.                 DatagramSocket receDs = new DatagramSocket(8888);
  38.                
  39.                 //开启线程,进行通讯。
  40.                 new Thread(new Send(senfDs)).start();
  41.                 new Thread(new Rece(receDs)).start();
  42.         }
  43. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 赞一个!

查看全部评分

回复 使用道具 举报
重新看看毕姥爷第23天的第八节课的视频吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马