2010-11-23 4 views
0

Ich stieß auf ein ziemlich ungewöhnliches Problem, bei dem die Bind-Funktion nur Port (dh Wildcard-Bindung) Linux-Netzwerk-Aliase (die zusätzlichen Adressen auf einer einzigen Netzwerkkarte) nicht wirklich abhört .Wildcard-Bindung in Java bindet nicht an Netzwerk-Aliase

Das bedeutet, dass das Senden von Anforderungen an die Haupt-IP-Adresse der Netzwerkkarte normal funktioniert, aber alle Anforderungen an zusätzliche IP-Adressen fehlschlagen.

Hatte jemand in der Vergangenheit dies festgestellt?

+0

Wie werden diese "Aliase" eingerichtet? 'ip addr add' oder etwas anderes? –

+0

Sie fügten über ifcfg-eth0 hinzu: 0 und so weiter. – SyBer

Antwort

2

Wenn ich dies tun:

sudo ip addr add 192.168.1.186/24 dev eth0 

Dann folgt ausführen:

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

Dann in einer anderen Shell, dies:

telnet 192.168.1.186 8888 

Das Programm in der ersten Schale druckt:

accepted socket Socket[addr=/192.168.1.186,port=33867,localport=8888] 

Wenn ich das wiederhole, aber meine 'echte' Adresse benutze, funktioniert das auch.

So sieht es für mich wie Bindung an 0.0.0.0 bindet an alle Adressen, einschließlich der zusätzlichen zu einem Gerät hinzugefügt.

Wenn ich den ServerSocket-Konstruktoraufruf ändern, um das Formular mit einem Argument zu verwenden, funktioniert alles noch immer wie beschrieben, also sieht es so aus, als wäre es an 0.0.0.0 gebunden.

+0

Nun, das könnte ein Problem mit Mina 1.1.x lib ich verwendet haben, denn in meinem Fall funktioniert UDP-Port einfach nur auf der ersten IP. Erst nachdem ich mich an jede benötigte IP gebunden habe, hat es normal funktioniert. – SyBer

Verwandte Themen