黑马程序员技术交流社区

标题: 网络通讯发广播,只有后面的那个端口收的到!why??? [打印本页]

作者: Changer_s    时间: 2013-5-31 10:52
标题: 网络通讯发广播,只有后面的那个端口收的到!why???
毕老师不是说网络通讯发广播所有人都收的到吗?怎么我的出问题呢?只有后面指定的端口可以接收?
  1. public class UDPSend1{

  2.         public static void main(String[] args) throws Exception {
  3.                 //1.创建UDP服务,通过DatagramSocket()对象
  4.                 DatagramSocket ds = new DatagramSocket();
  5.                
  6.                 //2.确定数据,并封装数据包
  7.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  8.                 String line = null;
  9.                 while ((line=br.readLine()) != null) {
  10.                         if("886".equals(line))
  11.                                 break;
  12.                 byte[] buf = line.getBytes();
  13.                 DatagramPacket dp =
  14.                         new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.255"),10002);
  15.                
  16.                 //3.通过Socket服务的发送功能,将数据包发过去
  17.                 ds.send(dp);
  18.                 }
  19.                 //  4.关闭资源
  20.                 ds.close();
  21.         }
  22. }
复制代码
下面1002可以接收信息
  1. class UDPReceive1 {
  2.         public static void main(String[] args) throws Exception {
  3.                 //1.创建UDPSocket服务,建立端点
  4.                 DatagramSocket ds = new DatagramSocket(10002);
  5.                 while(true){
  6.                         //2.定义数据包,用于存储数据
  7.                         byte[] buf = new byte[1024];
  8.                         DatagramPacket dp = new DatagramPacket(buf, buf.length);
  9.                         //3.通过Socket服务的receive方法将收到的数据存入数据包中。
  10.                         ds.receive(dp);
  11.                         //4.通过数据包的方法获取其中的数据
  12.                         String ip = dp.getAddress().getHostAddress();
  13.                         String date = new String(dp.getData(),0,dp.getLength());
  14.                         int port = dp.getPort();
  15.                         System.out.println(ip+"::"+date+"::"+port);
  16.                 }
  17.         }
  18. }
复制代码
这个10001端口就没信息
  1. class UDPReceive2 {
  2.         public static void main(String[] args) throws Exception {
  3.                 //1.创建UDPSocket服务,建立端点
  4.                 DatagramSocket ds = new DatagramSocket(10001);
  5.                 while(true){
  6.                         //2.定义数据包,用于存储数据
  7.                         byte[] buf = new byte[1024];
  8.                         DatagramPacket dp = new DatagramPacket(buf, buf.length);
  9.                         //3.通过Socket服务的receive方法将收到的数据存入数据包中。
  10.                         ds.receive(dp);
  11.                         //4.通过数据包的方法获取其中的数据
  12.                         String ip = dp.getAddress().getHostAddress();
  13.                         String date = new String(dp.getData(),0,dp.getLength());
  14.                         int port = dp.getPort();
  15.                         System.out.println(ip+"::"+date+"::"+port);
  16.                 }
  17.         }
  18. }
复制代码

作者: w270307032    时间: 2013-5-31 11:35
是的,毕老师的意思是网络通讯发广播,所有这个IP号段即(192.168.1.1~192.168.1.254)的人的指定端口都可以用来接收。是往所有的的电脑上发了,但是端口是你在 DatagramPacket dp =
                        new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.255"),10002);
                指定的10002。所以这个号段的其它所有电脑也想收到消息,只能是指定的10002端口
作者: Changer_s    时间: 2013-5-31 11:56
w270307032 发表于 2013-5-31 11:35
是的,毕老师的意思是网络通讯发广播,所有这个IP号段即(192.168.1.1~192.168.1.254)的人的指定端口都可 ...

那应该怎么改写呢?
作者: 蚂蚁搬家    时间: 2013-5-31 12:39
你第一段程序就是发送端指定将数据发送到网络段内的所有机器上的10002端口,而你第三段程序指定的端口号是10001,不是一个端口号,当然接收不到数据了。
作者: Changer_s    时间: 2013-5-31 17:22
蚂蚁搬家 发表于 2013-5-31 12:39
你第一段程序就是发送端指定将数据发送到网络段内的所有机器上的10002端口,而你第三段程序指定的端口号是1 ...

我要发广播,所有端口都可以收到!怎么改?
作者: Changer_s    时间: 2013-5-31 23:46
求大哥指点呀!这简单的问题怎么没人提醒一下呀!改哪里呀???
作者: 曹睿翔    时间: 2013-6-2 10:41
等我回去给你看看
作者: Changer_s    时间: 2013-6-3 20:23
本帖最后由 Changer_s 于 2013-6-3 20:25 编辑
曹睿翔 发表于 2013-6-2 10:41
等我回去给你看看

恩恩。亲,有结果没?


作者: Changer_s    时间: 2013-6-4 09:38
曹睿翔 发表于 2013-6-2 10:41
等我回去给你看看

没看懂,你就把代码贴一下吧?要修改的具体代码,他们说的我懂,但是不晓得该哪里呀!
作者: Changer_s    时间: 2013-6-4 20:34
曹睿翔 发表于 2013-6-2 10:41
等我回去给你看看

一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你能解决么?
作者: Changer_s    时间: 2013-6-4 20:35
w270307032 发表于 2013-5-31 11:35
是的,毕老师的意思是网络通讯发广播,所有这个IP号段即(192.168.1.1~192.168.1.254)的人的指定端口都可 ...

一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你能解决么?
作者: Changer_s    时间: 2013-6-4 20:35
蚂蚁搬家 发表于 2013-5-31 12:39
你第一段程序就是发送端指定将数据发送到网络段内的所有机器上的10002端口,而你第三段程序指定的端口号是1 ...

一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你能解决么?
作者: 蚂蚁搬家    时间: 2013-6-5 17:27
Changer_s 发表于 2013-6-4 20:35
一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你 ...

你看一下API,发送端指定的端口号应该可以是一个整型数组吧,那样的话就可以发送给同一个IP的多个端口
作者: 蚂蚁搬家    时间: 2013-6-5 19:02
Changer_s 发表于 2013-6-4 20:35
一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你 ...

我刚才看了下API,发送端指定的发送端口的端口号只能有一个,意思就是只能发给一个端口,我也不知道该怎么办了
作者: Changer_s    时间: 2013-6-5 23:21
蚂蚁搬家 发表于 2013-6-5 19:02
我刚才看了下API,发送端指定的发送端口的端口号只能有一个,意思就是只能发给一个端口,我也不知道该怎 ...

那我们老师发送广播消息给所有的学生,是怎么做到的呢?
求代码
作者: 蚂蚁搬家    时间: 2013-6-6 09:19
Changer_s 发表于 2013-6-5 23:21
那我们老师发送广播消息给所有的学生,是怎么做到的呢?
求代码

发送给学生就是用你写的代码,只不过每个学生的接收端都写的是老师指定的那个端口号,就是老师指定10001,学生就也写10001,写10002就收不到
作者: Changer_s    时间: 2013-6-6 11:05
本帖最后由 Changer_s 于 2013-6-6 11:06 编辑
蚂蚁搬家 发表于 2013-6-6 09:19
发送给学生就是用你写的代码,只不过每个学生的接收端都写的是老师指定的那个端口号,就是老师指定10001 ...

哥们,那这样发送老师不累死呢?要发那么多同学?我的意思就说学生端口号都一样,ip不一样,老师是怎么发送群消息的?(求代码)





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