DatagramSocket设置SocketAddress为127.0.0.1后,无法将数据包发送到多播地址

无_名 2015-02-27 05:17:17
我在一个服务端用MulticastSocket建立一个用于接收多播消息的服务,加入的多播地址为 230.0.0.1 端口为30000。
发送方我知道用MulticastSocket 将数据包DatagramPacket地址设置为 230.0.0.1 端口为30000 可以多播出去,我试了,服务端也确实可以。
现在问题是我在网上看到用DatagramSocket 可以将数据包发送到多播地址

DatagramSocket ds=new DatagramSocket();
DatagramPacket dp=new DatagramPacket(new byte[0], 0, new InetSocketAddress("230.0.0.1", 30000));
ds.send(dp);

我这样试了,服务端MulticastSocket也确实收到了数据包。这里DatagramSocket 获取到的SocketAddress是默认的0.0.0.0
现在问题来了:
DatagramSocket 是可以设置监听地址和端口的,如果设置成127.0.0.1后,发觉数据包就无法发送到多播地址了。如果设置成网卡的ip 如192.168.11.2(现在网卡的IP) 又可以发送到多播地址,就是设置成127.0.0.1不行,代码如下

InetSocketAddress isa=new InetSocketAddress("127.0.0.1", 40000);
DatagramSocket ds=new DatagramSocket(isa);
DatagramPacket dp=new DatagramPacket(new byte[0], 0, new InetSocketAddress("230.0.0.1", 30000));
ds.send(dp);

本人对网络编程并不很清楚,不知道是不是127.0.0.1有什么特殊的。理论上来说DatagramSocket 设置InetSocketAddress只是影响自己接收消息(ip和端口)的监听位置,为什么会影响消息的发送呢?
分数不多,望大家知道的不吝赐教。
...全文
499 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
无_名 2015-02-27
  • 打赏
  • 举报
回复
引用 1 楼 chenjing0320 的回复:
多播地址的范围是从224.0.0.0到239.255.255.255。 写127.0.0.1应该不行吧。
InetSocketAddress isa=new InetSocketAddress("127.0.0.1", 40000); DatagramSocket ds=new DatagramSocket(isa); 这个InetSocketAddress 对象设置的127.0.0.1跟多播地址没关系吧,只是个监听地址吧? 又不是MulticastSocket的joinGroup方法设置多播地址
chenjing0320 2015-02-27
  • 打赏
  • 举报
回复
多播地址的范围是从224.0.0.0到239.255.255.255。 写127.0.0.1应该不行吧。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧