想象一下以下代码:
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的替代方案是什么?这用于单元测试。
此致
纳斯
答案 0 :(得分:3)
以防其他人偶然发现这个问题,我正在回答。
不幸的是,Windows上不允许连接到任何地址。
Winsock函数 connect 将返回错误代码 WSAEADDRNOTAVAIL [远程地址不是有效地址(例如INADDR_ANY或in6addr_any)], 正如Windows API Documentation所述:
如果name参数指定的结构的地址成员填充了零,则connect将返回错误WSAEADDRNOTAVAIL。
因此,如果不使用任何本地主机地址,我认为您在Windows上尝试做的事情是不可能的(虽然我想知道Unix行为是一个错误还是故意。)
我建议设置更多的环回接口,正如Mark Reed在comment中建议的那样。