6

想象一下下面的代码:

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上的替代方案是什么?这用于单元测试。

问候

乔纳斯

4

1 回答 1

6

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

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

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

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

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

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

于 2015-01-30T06:09:19.753 回答