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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

毕老师不是说网络通讯发广播所有人都收的到吗?怎么我的出问题呢?只有后面指定的端口可以接收?
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

18 个回复

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

哥们,那这样发送老师不累死呢?要发那么多同学?我的意思就说学生端口号都一样,ip不一样,老师是怎么发送群消息的?(求代码)
回复 使用道具 举报
Changer_s 发表于 2013-6-5 23:21
那我们老师发送广播消息给所有的学生,是怎么做到的呢?
求代码

发送给学生就是用你写的代码,只不过每个学生的接收端都写的是老师指定的那个端口号,就是老师指定10001,学生就也写10001,写10002就收不到
回复 使用道具 举报
蚂蚁搬家 发表于 2013-6-5 19:02
我刚才看了下API,发送端指定的发送端口的端口号只能有一个,意思就是只能发给一个端口,我也不知道该怎 ...

那我们老师发送广播消息给所有的学生,是怎么做到的呢?
求代码
回复 使用道具 举报
Changer_s 发表于 2013-6-4 20:35
一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你 ...

我刚才看了下API,发送端指定的发送端口的端口号只能有一个,意思就是只能发给一个端口,我也不知道该怎么办了
回复 使用道具 举报
Changer_s 发表于 2013-6-4 20:35
一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你 ...

你看一下API,发送端指定的端口号应该可以是一个整型数组吧,那样的话就可以发送给同一个IP的多个端口
回复 使用道具 举报
蚂蚁搬家 发表于 2013-5-31 12:39
你第一段程序就是发送端指定将数据发送到网络段内的所有机器上的10002端口,而你第三段程序指定的端口号是1 ...

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

一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你能解决么?
回复 使用道具 举报
曹睿翔 发表于 2013-6-2 10:41
等我回去给你看看

一个发送消息到同一个端口上,但是这样我的那两个接受信息的类用的是同一端口,必然有一个出异常,这个你能解决么?
回复 使用道具 举报
曹睿翔 发表于 2013-6-2 10:41
等我回去给你看看

没看懂,你就把代码贴一下吧?要修改的具体代码,他们说的我懂,但是不晓得该哪里呀!

点评

真看懂别人回答的了?贴代码也就是改个接收端的端口号,你自己测试  发表于 2013-6-4 10:58
回复 使用道具 举报
本帖最后由 Changer_s 于 2013-6-3 20:25 编辑
曹睿翔 发表于 2013-6-2 10:41
等我回去给你看看

恩恩。亲,有结果没?

点评

不是有人回答正确了嘛?再次点下边的编辑,修改为已解决  发表于 2013-6-4 07:19
回复 使用道具 举报
等我回去给你看看
回复 使用道具 举报
求大哥指点呀!这简单的问题怎么没人提醒一下呀!改哪里呀???
回复 使用道具 举报
蚂蚁搬家 发表于 2013-5-31 12:39
你第一段程序就是发送端指定将数据发送到网络段内的所有机器上的10002端口,而你第三段程序指定的端口号是1 ...

我要发广播,所有端口都可以收到!怎么改?
回复 使用道具 举报
你第一段程序就是发送端指定将数据发送到网络段内的所有机器上的10002端口,而你第三段程序指定的端口号是10001,不是一个端口号,当然接收不到数据了。
回复 使用道具 举报
w270307032 发表于 2013-5-31 11:35
是的,毕老师的意思是网络通讯发广播,所有这个IP号段即(192.168.1.1~192.168.1.254)的人的指定端口都可 ...

那应该怎么改写呢?
回复 使用道具 举报
是的,毕老师的意思是网络通讯发广播,所有这个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端口

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马