Socket.connect()到0.0.0.0:Windows与Mac

想象一下以下代码:

String hostName = "0.0.0.0"; int port = 10002; int timeout = 5000; Socket socket = new Socket(); socket.connect(new InetSocketAddress(hostName, port), timeout); 

在Mac上它工作正常并执行连接(即使没有在端口10002上运行),在Windows上我得到以下exception:

 java.net.SocketException: Permission denied: connect 

这有什么区别以及Windows上的替代方案是什么? 这用于unit testing。

问候

乔纳斯

以防其他人偶然发现这个问题,我正在回答这个问题。

不幸的是,Windows上不允许连接到任何地址。

Winsock函数connect将返回错误代码WSAEADDRNOTAVAIL [ 远程地址不是有效地址(例如INADDR_ANY或in6addr_any) ],如Windows API文档中所述 :

如果name参数指定的结构的地址成员用零填充,则connect将返回错误WSAEADDRNOTAVAIL。

因此,在不使用任何本地主机地址的情况下,我认为您在Windows上尝试做的事情是不可能的(尽管我想知道Unix行为是一个错误还是故意的。)。

我建议设置更多的环回接口,正如Mark Reed在他的评论中所说的那样。

    Interesting Posts