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在他的评论中所说的那样。