Привязка по шаблону в Java не привязывается к псевдонимам сети - PullRequest
0 голосов
/ 23 ноября 2010

Я столкнулся с довольно необычной проблемой, когда функция привязки только к порту (т. Е. Привязка по шаблону) фактически не прослушивает псевдонимы сети Linux (дополнительные адреса на одной сетевой карте).

Это означает, что отправка запросов на основной IP-адрес для сетевой карты работает нормально, но любые запросы на дополнительные IP-адреса не выполняются.

Кто-нибудь сталкивался с этим в прошлом?

1 Ответ

2 голосов
/ 23 ноября 2010

Если я сделаю это:

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);
    }
}

Затем в другой оболочке это:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...