我在一个服务端用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和端口)的监听位置,为什么会影响消息的发送呢?
分数不多,望大家知道的不吝赐教。