主机上的ServerSocket.accept()不接受来自来宾VM

时间:2019-01-14 12:50:47

标签: java tcp virtual-machine serversocket

在我的Java应用程序中,我有以下代码:

_serverSocket = new ServerSocket();
_serverSocket.setReuseAddress(true);
_serverSocket.bind(new InetSocketAddress(port));
// _serverSocket = ServerSocket[addr=0.0.0.0/0.0.0.0,localport=33202]
_socket = _serverSocket.accept();
...

在VM中,我启动一个(黑盒)客户端应用程序,尝试连接到上述服务器。出于未知原因,没有建立连接并且接受永不返回。

我知道客户端应用程序正在尝试连接,因为我在Wireshark中看到适当的数据包: Wireshark screen capture

我无法在主机上启动相同的客户端应用程序,但可以使用nc从主机成功建立TCP连接,因此我知道服务器实际上正在侦听。 VM和主机位于10.11.1.0子网中。主机具有IP 10.11.1.1,VM 10.11.1.68。他们可以互相ping通。

但是,由于某种原因,TCP数据包似乎没有到达我的Java代码。任何想法,为什么或如何进一步调试呢?

1 个答案:

答案 0 :(得分:0)

我可以解决我的问题。主机的Windows防火墙设置确实存在问题。在为我用来运行服务器的特定JDK的javaw.exe添加入站规则后,可以成功建立连接。

向公司IT部门大声疾呼,不仅让我快速禁用了防火墙,以确定是否是问题的原因。 :\