Java中的通配符绑定不绑定到网络别名
我遇到了一个非常不寻常的问题,即只将函数绑定到端口(即通配符绑定),实际上不侦听Linux网络别名(单个网卡上的附加地址) 这意味着向网卡的主IP地址发送请求确实可以正常工作,但向其他IP的任何请求都会失败 过去有人遇到过这种情况吗?如果我这样做:Java中的通配符绑定不绑定到网络别名,java,linux,binding,Java,Linux,Binding,我遇到了一个非常不寻常的问题,即只将函数绑定到端口(即通配符绑定),实际上不侦听Linux网络别名(单个网卡上的附加地址) 这意味着向网卡的主IP地址发送请求确实可以正常工作,但向其他IP的任何请求都会失败 过去有人遇到过这种情况吗?如果我这样做: sudo ip addr add 192.168.1.186/24 dev eth0 然后运行以下命令: import java.net.*; public class Bind { public static void main(Str
sudo ip addr add 192.168.1.186/24 dev eth0
然后运行以下命令:
import java.net.*;
public class Bind {
public static void main(String... args) throws Exception {
ServerSocket ss = new ServerSocket(8888, 50, InetAddress.getByName("0.0.0.0"));
Socket s = ss.accept();
System.out.println("accepted socket " + s);
}
}
然后,在另一个shell中:
telnet 192.168.1.186 8888
第一个shell中的程序将打印:
accepted socket Socket[addr=/192.168.1.186,port=33867,localport=8888]
如果我重复这一点,但使用我的“真实”地址,那也行
因此,在我看来,绑定到0.0.0.0绑定到所有地址,包括添加到设备的额外地址
如果我将ServerSocket构造函数调用更改为使用单参数形式,则一切仍按所述方式工作,因此看起来像是绑定到了0.0.0.0。这些“别名”是如何设置的<代码>ip地址添加,或者其他什么?他们通过ifcfg-eth0:0等方式添加。这可能是我使用的Mina 1.1.x库的问题,因为在我的情况下,UDP端口仅在第一个ip上工作。只有在我专门绑定到每个必需的IP之后,它才开始正常工作。