0
我遇到了一个很常见的问题,其中仅用于端口的绑定函数(即通配符绑定)实际上并不监听Linux网络别名(单个网卡上的附加地址) 。Java中的通配符绑定不绑定到网络别名
这意味着向网卡的主IP地址发送请求确实可以正常工作,但是对其他IP的任何请求都会失败。
有没有人在过去遇到过这个?
我遇到了一个很常见的问题,其中仅用于端口的绑定函数(即通配符绑定)实际上并不监听Linux网络别名(单个网卡上的附加地址) 。Java中的通配符绑定不绑定到网络别名
这意味着向网卡的主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
在第一壳体打印程序:
accepted socket Socket[addr=/192.168.1.186,port=33867,localport=8888]
如果我再说一遍,但使用我的'真实'地址,那也可以。
因此,它看起来像绑定到0.0.0.0绑定到所有地址,包括额外的添加到设备。
如果我更改ServerSocket构造函数调用以使用单参数形式,所有东西仍然如上所述,所以它看起来像是绑定到0.0.0.0。
这些'别名'是如何设置的? `ip addr add`,还是别的? – 2010-11-23 16:50:47
他们通过ifcfg-eth0:0等添加。 – SyBer 2010-11-25 20:02:13