请注意,在这个帖子中,海报似乎有一个与我相关的问题:DatagramSocket Broadcast Behavior (Windows vs. Linux)不幸的是,这篇文章在没有解决问题的情况下死亡。
我目前在Java中遇到一些Datagramsockets问题。总体而言,问题是我有一段Java代码能够在Windows上接收数据包而不是Linux。
我的申请非常重要
我的测试机器
目前我的程序在m1上接收来自m5和m6的数据包,但不接收m2,m3和m4。
总的来说,程序中套接字背后的逻辑可以描述如下
// Setting up the socket
DatagramSocket socket = new DatagramSocket(networkInterfaceAddress, port);
socket.setReceiveBufferSize(90000);
// Setting up the receive packets
DatagramPacket packet = new DatagramPacket(new byte[1], 0);
// Constructing the receive buffer
buffer = new byte[1024]
// Receiving the packet
packet.setData(buffer);
packet.setLength(buffer.length);
socket.receive(packet);
我尝试了以下内容:
4似乎表明问题是networkInterfaceAddress但是如果我尝试在调试模式下运行程序,我可以看到networkInterfaceAddress确实包含期望值。为了确保我在m2上尝试了一个hardcodet虚拟示例。在这个虚拟的例子中我
即使使用这种硬编码网络接口,我也无法接收数据包。
所以目前我只能通过不向DatagramSocket构造函数提供网络接口来接收linux上的数据包。这个解决方案的问题是(据我所知),这将导致应用程序无法仅接收来自特定网络接口的数据包。
说实话,我的想法已经不多了,所以我希望有人可以帮我解决这个问题。