java - 主机上的 ServerSocket.accept() 不接受源自 guest VM 的连接

标签 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();
...

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

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

我无法在主机上启动相同的客户端应用程序,但我可以使用 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/

相关文章:

c - 如何使用套接字 api 发送和接收字节?

tcp - Powerbuilder Winsock 库实现

docker - Docker 中的 Virtualbox

java - Thread在线程池执行时抛出异常会怎样?

java - 随机化数字 1 到 100 的数组

java - 如何解释这些时间戳?

c# - 应该异步执行对 NetworkStream 的写入

java - 如何在 switch-case 语句中获取和设置值

usb - 如何使用 VMware vmrun 管理 USB 设备?

branch - 如何并行运行Web项目的分支?