在我的 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();
...
在虚拟机中,我启动一个(黑匣子)客户端应用程序,尝试连接到上述服务器。由于未知原因,没有建立连接并且接受永远不会返回。
我知道客户端应用程序正在尝试连接,因为我在 Wireshark 中看到了适当的数据包:
我无法在主机上启动相同的客户端应用程序,但我可以使用 nc
从主机成功建立 TCP 连接,因此我知道服务器实际上正在监听。
虚拟机和主机位于 10.11.1.0 子网中。主机的 IP 为 10.11.1.1,VM 的 IP 为 10.11.1.68。他们可以互相 ping 通。
但是,由于某种原因,TCP 数据包似乎没有到达我的 Java 代码。任何想法为什么或如何我可以进一步调试这个?
最佳答案
我可以解决我的问题。确实是主机的Windows防火墙设置有问题。在为我用来运行服务器的特定 JDK 的 javaw.exe
添加入站规则后,可以成功建立连接。
向公司 IT 部门表示感谢,他们不仅让我快速禁用防火墙来确定这是否是问题的原因。 :\
关于java - 主机上的 ServerSocket.accept() 不接受源自 guest VM 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181891/