Socket.connect()为0.0.0.0:Windows与Mac的(Socket.conne

2019-06-27 01:52发布

想象一下下面的代码:

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上的选择吗? 这在单元测试中使用。

问候

乔纳斯

Answer 1:

就在就这个问题以防其他人绊倒,我回答它。

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

在Winsock功能连接将返回错误代码WSAEADDRNOTAVAIL [ 远程地址不是有效地址(例如INADDR_ANY或IN6ADDR_ANY)],如在所陈述的Windows API文档 :

如果由name参数指定的结构的地址元件用零填充,连接将返回错误WSAEADDRNOTAVAIL。

因此,没有使用任何本地主机地址,我知道你在试图做是不可能在Windows(虽然我不知道如果Unix的行为是错误的或故意的)。

我建议设立更多回环接口,马克·里德在他的建议意见 。



文章来源: Socket.connect() to 0.0.0.0: Windows vs. Mac