gpt4 book ai didi

java - 绑定(bind)到地址的套接字无法连接到监听器,除非在 Win XP 上绑定(bind)到 127.0.0.1

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:11 24 4
gpt4 key购买 nike

我创建了一个套接字并将其绑定(bind)到 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 上运行良好。

附加信息:

我将其绑定(bind)到 0。我的问题是,我每 5 分钟探测一次监听器以查看它是否已启动。为此,我尝试将套接字绑定(bind)到 .254 地址,然后通过尝试连接的套接字的地址确定它是探针还是真实的。这在 XP 上不起作用,因为套接字连接失败。但如果我不绑定(bind),套接字将采用 127.0.0.1 地址,我无法区分。我的情况有什么解决方法吗?

最佳答案

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

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

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

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

或者更好的是,不要显式绑定(bind)。操作系统将检测您正在建立环回连接并隐式执行适当的绑定(bind)。

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

关于java - 绑定(bind)到地址的套接字无法连接到监听器,除非在 Win XP 上绑定(bind)到 127.0.0.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24400601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com