Socket.connect()到0.0.0.0:Windows与Mac

时间:2012-08-16 07:31:34

标签: java sockets ip-address connect

想象一下以下代码:

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上我得到以下异常:

java.net.SocketException: Permission denied: connect

这里有什么区别,Windows的替代方案是什么?这用于单元测试。

此致

纳斯

1 个答案:

答案 0 :(得分:3)

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

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

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

  

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

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

我建议设置更多的环回接口,正如Mark Reed在comment中建议的那样。