绑定到地址的套接字无法连接到侦听器,除非在Win XP上绑定到127.0.0.1

时间:2014-06-25 05:08:27

标签: java sockets windows-xp

我创建了一个套接字并将其绑定到127.0.0.254然后尝试使用

连接到0.0.0.0 443上的httpListener
socket= new Socket();
socket.bind("127.0.0.254:0");
socket.connect("127.0.0.1",443);

连接时出现异常"没有到主机的路由" 相同的代码块在win 8上工作正常。

ADDITINAL INFO:

我将它绑定到0.我的问题是,我每隔5分钟探听一次监听器,看看它是否已启动。为此,我尝试将套接字绑定到.254地址,然后通过尝试连接的套接字的地址确定它是探测还是真实。这不适用于XP,因为套接字连接失败。但是,如果我不绑定,套接字将采用127.0.0.1地址,我无法区分。我的方案的任何解决方法?

1 个答案:

答案 0 :(得分:1)

我怀疑XP在127.x.y.z地址范围方面没有正确处理环回适配器。我怀疑如果你从另一个绑定到127.0.0.1的套接字连接到127.0.0.1,你就可以了。但是您在示例中使用相同的源和目标端口(443)。

你真的需要客户端端口也在443上吗?服务器(侦听套接字)绑定到众所周知的端口通常是有意义的,但客户端可以绑定到任何端口。

因此,这适用于所有平台:

socket= new Socket();
socket.bind("127.0.0.1:0");
socket.connect("127.0.0.1",443);

或者更好的是,不要明确绑定。操作系统将检测到您正在连接到环回并隐式执行适当的绑定。

socket= new Socket();
socket.connect("127.0.0.1",443);