2009-05-11 7 views
2

Was würde dazu führen, dass ein TCP-Socket "java.net.BindException: Address" bereits verwendet, obwohl die reuse-Adresse auf "true" gesetzt ist? Dies tritt nur auf, wenn die Anwendung schnell neu gestartet wird. Läuft auf CentOS 5 Linux OS.Java Bind Exception

+3

Sie stellen sicher, die TCP-Socket richtig schließen ? Wie starten Sie die Anwendung neu? – AlbertoPL

+0

Es ist ein harter Neustart der Anwendung, der von einer anderen "Software-Monitor" -Anwendung beendet wird. (Nehmen wir einfach an, es ist ein Pkill). – Michael

+0

Ich habe die gleiche Sache mit .NET unter Windows gesehen, wenn ein Server-Prozess "getötet" wurde anstatt normal herunterzufahren. –

Antwort

2

Wenn das, was Sie sagen, korrekt ist, sollten Sie in der Lage sein, diese Ausnahme in einer Schleife abzufangen und nach einigen Sekunden erneut zu versuchen. (Sie sollten dies nicht tun müssen, aber ich habe von einigen seltsamen Dingen über CentOS gehört)

1

Java Bind Ausnahme tritt auf, wenn entweder Ihr Port oder InetAddress bereits verwendet wird und Sie noch einmal verwenden möchten. Wenn Sie also den Port freigeben, stoppen Sie das Programm, wenn es ausgeführt wird. sonst den Port ändern

Dank Deepak

3

Dieser irgendwie erklärt es:

http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html#bind

Manchmal kann man feststellen, Sie versuchen einen Server und binden erneut ausführen() schlägt fehl , behauptet "Adresse wird bereits verwendet." Was bedeutet das? Nun, ein wenig Bit eines Sockels, der verbunden war, ist immer noch herum im Kernel, hängen und es ist der Port hogging. Sie können entweder warten, bis es (eine Minute oder so) zu löschen, oder Code zu Ihrem Programm hinzufügen ermöglicht es den Port, wie diese

(liefert C-Code)

wiederzuverwenden

Im Wesentlichen rufen Sie in C eine Funktion namens setsockopt() auf, und einer der Parameter heißt SO_REUSEADDR, mit dem Sie diesen Port wiederverwenden können.

fand ich einige kurze Links auf Google, die Sie begonnen haben, herauszufinden, bekommen sollte, wie in Java die entsprechende Option setzen:

http://java.sun.com/j2se/1.4.2/docs/guide/net/socketOpt.html

http://java.sun.com/j2se/1.4.2/docs/api/java/net/SocketOptions.html

+0

Ihre Links funktionieren nicht mehr! – Jesus