Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的通配符绑定不绑定到网络别名_Java_Linux_Binding - Fatal编程技术网

Java中的通配符绑定不绑定到网络别名

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

我遇到了一个非常不寻常的问题,即只将函数绑定到端口(即通配符绑定),实际上不侦听Linux网络别名(单个网卡上的附加地址)

这意味着向网卡的主IP地址发送请求确实可以正常工作,但向其他IP的任何请求都会失败

过去有人遇到过这种情况吗?

如果我这样做:

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之后,它才开始正常工作。