Если я сделаю это:
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.