IPv6 无法连接到本地主机上的 Java NIO 服务器?

问题描述 投票:0回答:1

我有一个基于 NIO 的服务器本地托管在端口

18888
上,它可以与 IPv4 正常工作,即我可以使用以下任一方式成功连接客户端:

  • “本地主机:18888”
  • “127.0.0.1:18888”

我很好奇 IPv6 是否可行,并尝试了以下方法:

  • “::1:18888”
  • “[::1]:18888”
  • “[0:0:0:0:0:0:0:1]:18888”

所有这些都失败了,但有一个例外:

java.net.ConnectException: Connection refused: no further information
    at java.base/sun.nio.ch.Net.pollConnect(Native Method)
    at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682)
    at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:973)

在 IPv4 正常的情况下,是否有某种原因导致 IPv6 可能无法在这种情况下工作?

注意:这是一台现代 PC,Windows 11,JDK 21,据我所知,IPv6 应该完全启用,

ping [0:0:0:0:0:0:0:1]
按预期工作等。

编辑:按照 larsks 的建议,我尝试了

netstat -aon
并找到了 IPv4 的相关行,但显然没有 IPv6 的相关行?是否应该有相应的 IPv6 条目?

 TCP    127.0.0.1:18888        0.0.0.0:0              LISTENING       54256
java sockets networking nio ipv6
1个回答
0
投票

通过一些实验,我发现将服务器套接字绑定到“localhost”似乎只监听 IPv4 本地连接。

将服务器套接字绑定到“::”似乎适用于 IPv4 和 IPv6 本地访问(即客户端可以使用两者进行连接)。

© www.soinside.com 2019 - 2024. All rights reserved.