我无法在 java ServerSocket 中分配多个地址

I can't assign more than one Address in java ServerSocket

谢谢你帮助我。 我正在尝试使用以下代码在我的 java 程序中 运行 多个服务器:

addr = InetAddress.getByName("127.0.0."+MyIP);
ss = new ServerSocket(port,100,addr);

但是代码只适用于 MyIP=1,有没有办法解决这个问题?

如果您问一个系统是否可以有多个 127.x.x.x 地址,那么答案是 "It depends on your OS, and network configuration"。

在我的 Linux / Fedora 20 机器上,“/etc/sysconfig/network-scripts/ifcfg-lo”将所有 127.0.0.0/8 定义为环回地址。但是,如果您查看该文件,这意味着 "lo" 设备可以配置为允许更少的地址(或者如果您疯了)其他地址作为环回 IP 地址。

在MacOSX上,127.0.0.1是唯一默认配置的环回地址,但配置更多很容易(见参考资料)。

据我所知,在 Windows 7 上只有一个环回地址 - 127.0.0.1。它是硬连线的,并由网络堆栈特殊处理。 Windows 确实有一个 "Loopback Adapter" 但它的用途不同。

TL;DR - 您的代码可以在 Linux 上运行,但不能在 Windows 上运行。在 Mac OS/X 上,您需要调整网络配置以使其正常工作。

参考文献:


如果您问是否可以将多个 IP 地址绑定到一个 ServerSocket,那么答案是 "No"。

一个ServerSocket最多可以绑定一个IP地址。

如果您想使用多个 IP 地址收听/接受,则需要使用多个 ServerSocket 个实例。

但是,IP 地址 0.0.0.0 称为 "local wildcard" 地址。如果你绑定到这个,你就有效地绑定到所有网络接口的 IP 地址(包括环回接口)

另请参阅:

  • How to get InetAddress with wildcard ip 0.0.0.0?