Java virtualbox来宾和windows主机之间的UDP数据包丢失

Java virtualbox来宾和windows主机之间的UDP数据包丢失,java,networking,virtualbox,datagram,Java,Networking,Virtualbox,Datagram,windows(win7/x64)主机在其“仅限VirtualBox主机的网络适配器”上使用IP192.168.56.1。 linux(Debian 8)Virtualbox来宾被配置为“仅主机联网”。它使用静态IP地址192.168.56.100 主机和来宾可以通过以下方式相互ping,并从来宾发送UDP数据包: $ echo "hello"|netcat -u 192.168.56.1 10067 由Wireshark在主机的VirtualBox接口上侦听时检测到。 但是他们似乎没有通过网

windows(win7/x64)主机在其“仅限VirtualBox主机的网络适配器”上使用IP
192.168.56.1

linux(Debian 8)Virtualbox来宾被配置为“仅主机联网”。它使用静态IP地址
192.168.56.100

主机和来宾可以通过以下方式相互ping,并从来宾发送UDP数据包:

$ echo "hello"|netcat -u 192.168.56.1 10067
由Wireshark在主机的VirtualBox接口上侦听时检测到。
但是他们似乎没有通过网络堆栈, 我的简单UDP侦听器程序不接收数据包:

package test;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Test {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(10067, InetAddress.getByAddress(new byte[]{(byte) 192,(byte) 168,56,1}));
        DatagramPacket pkt = new DatagramPacket(new byte[1500], 1500);
        System.out.println("waiting...");
        socket.receive(pkt);
        System.out.println("received "+pkt.getLength());
    }
}
到目前为止,我所尝试的:

  • 确保linux iptables未处于活动状态
  • 禁用windows防火墙
  • 启用防火墙,但添加允许UDP与本地端口10067(域、专用和公用、任意IP)连接的传入流量规则& 计算机、用户和程序)
  • 将套接字绑定到“*”而不是“192.168.56.1”(
    socket=newdatagramsocket(10067)
  • 如果数据包是使用ncat-u 192.168.56.1 10067从windows发送的,则程序将正确接收数据包
  • 如果数据包被发送到同一“仅主机”网络上的另一个linux客户机,则相同的测试成功

有什么建议吗?

您是否尝试在主机上执行相同的命令(或类似的命令)(将消息发送到服务器的命令),因此,至少你知道问题是否与你的网络有关。@serhiy:是的,tcpdump在来宾机上接收从windows发送的带有
ncat-u 192.168.56.100 10067
的UDP数据包,我的程序在主机上接收带有
ncat-u 192.168.56.1 10067
的数据包。只是为了测试,尝试将网络适配器配置为NAT,而不是仅主机选项。事实上,当以NAT模式配置来宾时(在我切换到“仅主机”之前),UDP已正确地从来宾传输到主机。我意识到windows网络堆栈可能有一些隐藏的配置(来自网络域管理员)。但它是否应该干扰内部virtualbox适配器?