黑马程序员技术交流社区

标题: 网络编程中遇到的问题 [打印本页]

作者: 追逐    时间: 2014-4-5 12:45
标题: 网络编程中遇到的问题
本帖最后由 追逐 于 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. }
复制代码




作者: osully    时间: 2014-4-5 14:19
不是说可以让一个接收端可以接收到多个发送端发送过来的信息。

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

你这代码应该没问题啊,
唯一DatagramSocket ds = new DatagramSocket(6666);
这个发送其实可以不用指定端口
作者: 追逐    时间: 2014-4-5 16:30
osully 发表于 2014-4-5 14:19
不是说可以让一个接收端可以接收到多个发送端发送过来的信息。

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

不是太明白。可以具体的解释一下吗??
作者: ╰青青子佩ˊゝ    时间: 2014-4-5 17:05
是端口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:45
╰青青子佩ˊゝ 发表于 2014-4-5 17:05
是端口6666引起的问题。如下面代码所示

哦哦
明白了 。
谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2