wie prüfe ich ob ein port frei is ?

ryane

Mitglied
Hallo jungs ,
ich suche seit gestern nach einer Methode zum prüfen , ob ein Port bereit verwendet wird (Address Already in use) . Ich habe mit dem folgenden code probiert , und wollte dabei den fall behandeln , wenn ein Exception auftritt aber es klappt nicht , hat jemand dabei eine bessere idee :

Java:
bool belegt = false;
ServerSocket socket = null;
try {
    serverSocket = new ServerSocket(port);
} catch (IOException e) {
    belegt = true;
} finally { 
    // Clean up
    if (socket != null) socket.close(); 
}

Ich kann kein Exception abfangen


hier is die Meldung von Netbeans wenn , der port bereit verwendet wird.

SCHWERWIEGEND: null
java.net.SocketException: Unrecognized Windows Sockets error: 0: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
 
Ich kann kein Exception abfangen

hier is die Meldung von Netbeans wenn , der port bereit verwendet wird.

SCHWERWIEGEND: null
java.net.SocketException: Unrecognized Windows Sockets error: 0: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)


Du behandelst ja auch eine IOException und keine SocketException. Bei Sockets können eine ganze Latte Exceptions hochblubbern. Und selbst dann heißt es noch lange nicht das du einfach den alten socket schließen kannst um den Port sofort wieder frei zu machen. AFAIK gibt das TCP/IP Stack auch wenn der Socket geschlossen ist den nicht sofort wieder frei, sondern braucht ein paar Sekunden um aufzuräumen. Also schließen, 5 Sekunden warten, neu öffnen. Das "warten, neu öffnen" dann in einer Schleife bis es funktioniert hat.
 
Ich habe statt IOEception SocketExcepion geschrieben und das schliessen des Port entfernt ,aber klappt auch nicht . Ich möchte eigentlich den port nicht danach wieder schliessen , sondern dem benutzer sagen , dass er später noch versuchen soll ,da der Port bereit in verwendung durch eine andere application ist.
hast du dabei eine idee ?
 
Java:
ServerSocket socket = null;
try {
    serverSocket = new ServerSocket(port);
} catch (Exception e) {
    System.err.println("cannot create socket, try again later");
}

?

Kommt auf den Rest deiner Anwendung an - das kann man pauschal so gar nicht sagen.
 
Danke , damit kann ich schon weiter kommen .
habe auch eben grade ein ähnliches Code geschrieben und konnte immer ein IOException : null abfangen , das habe ich dann als besezt interpretiert.
 
Warum interpretieren, wenn man doch mit
Code:
Exception#getMessage();
eine Recht leserliche Fehlerbeschreibung bekommt.
Kommt da bei Dir tatsächlich null?
Ich bekomme bei belegtem Port eine BindException mit der Meldung Adress already in use.
 
Bei mir kommt es null raus , ich weiss auch nicht warum .....
Ich habe eine IOException abgefangen .. ich werde mal versuchen eine einfache Exception abzufangen und gucken was raus kommt. melde mich dann
Danke
 
SocketException erbt von IOException also sollte es reichen IOException abzufangen. Nimm doch mal nen Debugger und schau nach wer die Meldung ausgibt.
 

Zurück
Oben