我编写了一个Java 服务器应用程序,该应用程序侦听来自客户端的数据,然后写入数据库。 我在带有两个网卡的 linux Ubuntu 12.04 计算机上运行该应用程序。当我使用单个网络接口连接到网络时,它可以正常工作,但是当我启用两个网络接口时,我只能从连接到eth0的客户端接收数据。
我服务器的代码几乎是经典的:
String address = "0.0.0.0";
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress(address,port));
while (true) {
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
System.out.println("\n----Connection accepted----");
ConnectionHandler handler = new ConnectionHandler(clientSocket, mysql);
Thread handlerThread = new Thread(handler);
handlerThread.setPriority(Thread.NORM_PRIORITY);
handlerThread.start();
catch(Exception exc){
//catch statement
}
}
这个问题很奇怪,因为地址“0.0.0.0”应该创建一个监听所有接口的套接字。
有什么可以建议我如何解决这个问题?
编辑: 可能问题出在SO设置中。
这是我的/ etc / network / interfaces文件的内容:
auto lo
iface lo inet loopback
这是 sudo lshw -class network 命令的结果
~$ sudo lshw -class network
[sudo] password for administrator:
*-network
description: Ethernet interface
product: I210 Gigabit Network Connection
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:02:00.0
logical name: eth0
version: 03
serial: 90:1b:0e:0b:11:22
size: 100Mbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi msix pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.0.5-k duplex=full firmware=3.16, 0x800005ae ip=10.0.0.100 latency=0 link=yes multicast=yes port=twisted pair speed=100Mbit/s
resources: irq:18 memory:f7a00000-f7a7ffff ioport:e000(size=32) memory:f7a80000-f7a83fff
*-network
description: Ethernet interface
product: I210 Gigabit Network Connection
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:03:00.0
logical name: eth1
version: 03
serial: 90:1b:0e:0b:0f:25
size: 100Mbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi msix pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.0.5-k duplex=full firmware=3.16, 0x800005b0 ip=192.168.150.100 latency=0 link=yes multicast=yes port=twisted pair speed=100Mbit/s
resources: irq:19 memory:f7900000-f797ffff ioport:d000(size=32) memory:f7980000-f7983fff
答案 0 :(得分:0)
我认为你需要指定null来表示任何地址:
serverSocket.bind(new InetSocketAddress(null,port));
或替代方案:
serverSocket.bind(new InetSocketAddress(port));
两者都应映射到任何地址。
答案 1 :(得分:0)
最后,我解决了使用与此解决方案类似的方法来实现多个gataways的多个接口: NetworkManager: per device routing tables
特别是我将网络划分为两个大小,将一些地址分配给隧道接口,另一个分配给以太网接口。
唯一需要注意的是,不是向上,VPN使用 vpn-up 作为他的州。