Я написал серверное приложение 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
InetSocketAddress(hostname, port)
не создаст подстановочный сокет в Java 8. Попробуйте использовать толькоInetSocketAddress(port)
- person aw-think   schedule 30.03.2015/etc/network/interfaces
. И, пожалуйста, запустите следующую команду и опубликуйте вывод:sudo lshw -class network
- person aw-think   schedule 31.03.2015/etc/network/interfaces
- person aw-think   schedule 07.04.2015/etc/network/interfaces
не знаю почему предыдущая была пуста - person Niles   schedule 07.04.2015/etc/network/interfaces
. Таким образом, ваша сеть работает с момента загрузки правильно. После этого вы можете попробовать подключить клиентов к целевому IP-адресу вашего настроенного сервера. Клиенты должны находиться в одной подсети для вызова сервера, иначе вам потребуется маршрутизация. - person aw-think   schedule 08.04.2015