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

© 追逐 高级黑马   /  2014-4-5 12:45  /  919 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 追逐 于 2014-4-5 17:45 编辑

在看毕老师的视频时,毕老师说过一个广播的ip(192.168.1.255)地址,可以让一个接收端可以接收到多个发送端发送过来的信息。但是在我这里却不行。为什么呢?
请大神指教。
下面是我的源码
  1. import java.net.InetAddress;
  2. import java.net.DatagramSocket;
  3. import java.net.DatagramPacket;
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;

  6. class UdpSend2
  7. {
  8.         public static void main(String[] args) throws Exception
  9.         {
  10.                 DatagramSocket ds = new DatagramSocket(6666);
  11.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  12.                 String line = null;
  13.                 while((line = br.readLine()) != null)
  14.                 {
  15.                         if("886".equals(line))
  16.                                 break;
  17.                         byte[] by = line.getBytes();
  18.                         DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getByName("192.168.1.255"), 10001);
  19.                         ds.send(dp);
  20.                 }
  21.                 ds.close();
  22.         }
  23. }




  24. import java.net.DatagramSocket;
  25. import java.net.DatagramPacket;

  26. class UdpReceive2
  27. {
  28.         public static void main(String[] args) throws Exception
  29.         {
  30.                 DatagramSocket ds = new DatagramSocket(10001);
  31.                 while(true)
  32.                 {
  33.                         byte[] b = new byte[1024];
  34.                         DatagramPacket dp = new DatagramPacket(b, b.length);
  35.                         ds.receive(dp);
  36.                         String ip = dp.getAddress().getHostAddress();
  37.                         String data = new String(dp.getData(), 0, dp.getLength());
  38.                         int port = dp.getPort();
  39.                         System.out.println(ip + "    " + data + "    " + port);
  40.                 }
  41.         }
  42. }
复制代码



4 个回复

倒序浏览
不是说可以让一个接收端可以接收到多个发送端发送过来的信息。

而是你一个消息发送给多个所有ip地址下的接收端吧

你这代码应该没问题啊,
唯一DatagramSocket ds = new DatagramSocket(6666);
这个发送其实可以不用指定端口
回复 使用道具 举报
osully 发表于 2014-4-5 14:19
不是说可以让一个接收端可以接收到多个发送端发送过来的信息。

而是你一个消息发送给多个所有ip地址下的接 ...

不是太明白。可以具体的解释一下吗??
回复 使用道具 举报
是端口6666引起的问题。如下面代码所示
  1. import java.net.InetAddress;
  2. import java.net.DatagramSocket;
  3. import java.net.DatagramPacket;
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;
  6. class UdpSend2
  7. {
  8.                 //1.本来你这里6666是没有问题的,还是可以运行,前提是多台电脑分别充当发送端。这个6666这个端口被你开启,一个电脑(只有一个ip地址)开了多个控制台,也就是说被你开启多个6666端口,这是不能被允许的,因为一个端口在同一时间在同一台电脑被开启一个。所以你不能开启多个发送端的原因是因为不能开启多个6666端口,把6666去掉就没问题了
  9.         public static void main(String[] args) throws Exception
  10.         {
  11.                 DatagramSocket ds = new DatagramSocket(6666);
  12.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  13.                 String line = null;
  14.                 while((line = br.readLine()) != null)
  15.                 {
  16.                         if("886".equals(line))
  17.                                 break;
  18.                         byte[] by = line.getBytes();
  19.                         DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getByName("192.168.1.255"), 10001);
  20.                         ds.send(dp);
  21.                 }
  22.                 ds.close();
  23.         }
  24. }
  25. import java.net.DatagramSocket;
  26. import java.net.DatagramPacket;

  27. class UdpReceive2
  28. {
  29.         public static void main(String[] args) throws Exception
  30.         {
  31.                 DatagramSocket ds = new DatagramSocket(10001);
  32.                 while(true)
  33.                 {
  34.                         byte[] b = new byte[1024];
  35.                         DatagramPacket dp = new DatagramPacket(b, b.length);
  36.                         ds.receive(dp);
  37.                         String ip = dp.getAddress().getHostAddress();
  38.                         String data = new String(dp.getData(), 0, dp.getLength());
  39.                         int port = dp.getPort();
  40.                         System.out.println(ip + "    " + data + "    " + port);
  41.                 }
  42.         }
  43. }
复制代码




回复 使用道具 举报
╰青青子佩ˊゝ 发表于 2014-4-5 17:05
是端口6666引起的问题。如下面代码所示

哦哦
明白了 。
谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马