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

标签 java localserversocket

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

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

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

最佳答案

如果您询问系统是否可以有多个 127.x.x.x 地址,那么答案是“这取决于您的操作系统和网络配置”。

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

在 Mac OSX 上,127.0.0.1 是默认配置的唯一环回地址,但很容易配置更多地址(请参阅引用资料)。

据我所知,在 Windows 7 上只有一个环回地址 - 127.0.0.1。它是硬连线的,并由网络堆栈进行特殊处理。 Windows 确实有一个“环回适配器”,但其用途不同。

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

引用文献:

<小时/>

如果您询问是否可以将多个 IP 地址绑定(bind)到单个 ServerSocket,那么答案是“否”。

一个ServerSocket最多可以绑定(bind)到一个IP地址。

如果你想使用多个IP地址监听/接受,那么你需要使用多个ServerSocket实例。

但是,IP 地址 0.0.0.0 被称为“本地通配符”地址。如果绑定(bind)到此,您将有效绑定(bind)到所有网络接口(interface)(包括环回接口(interface))的 IP 地址

另请参阅:

关于java - 我无法在 java ServerSocket 中分配多个地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31451419/

相关文章:

.containsKey 中的 Java NullPointerException

java - 不可修改集合中的 ConcurrentModificationException

java - TCP - 如何在本地主机服务器上的两个玩家之间玩 java 游戏

android - 离线时无法与本地主机建立连接

java - Android Studio中执行aapt失败

java - Java 中的日期和时间

java - 将这种递归转换为迭代

c - 使用 Scapy 与 C 套接字通信

C - 无法绑定(bind)服务器套接字