标签:sockets networking java multicast
以下代码仅对我本地有效.我可以在另一个程序的同一台计算机上接收它.我在Wireshk中看不到任何流量(在Windows上).如果将多播地址更改为现有的地址(如10.10.10.10),那么我会在Wireshark中看到UDP数据包.
在Wireshark中,我使用过滤器udp.port ==5353.我可以看到到组播地址的其他一些数据包,我认为我的Wireshark设置是正确的.
防火墙已禁用.
public static void main( String[] args ) throws Exception {
byte[] buf = "some data".getBytes();
DatagramSocket socket = new DatagramSocket();
InetAddress address = InetAddress.getByName( "224.0.0.251" );
socket.send( new DatagramPacket( buf, buf.length, address, 5353 ) );
}
编辑:原因似乎是回送适配器(Microsoft LoopbackadapterfürKM-TEST).如果我删除回送适配器,那么它将起作用.在另一个系统上,有一个VMware适配器可能会产生平等问题.
为什么数据包没有发送到所有网络适配器?如何将其发送到正确的适配器?
解决方法:
在发送单播数据报时,路由表规定使用哪个网络接口发送数据包.对于多播,您需要指定接口.您可以使用MulticastSocket做到这一点.
假设您要发送的接口的IP为10.10.10.1,则可以执行以下操作:
public static void main( String[] args ) throws Exception {
byte[] buf = "some data".getBytes();
MulticastSocket socket = new MulticastSocket();
socket.setNetworkInterface(NetworkInterface.getByInetAddress(
InetAddress.getByName( "10.10.10.1" )));
InetAddress address = InetAddress.getByName( "224.0.0.251" );
socket.send( new DatagramPacket( buf, buf.length, address, 5353) );
}
标签:sockets,networking,java,multicast 来源: https://codeday.me/bug/20191118/2028876.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。