# wie prüfe ich ob ein port frei is ?



## ryane (20. Sep 2010)

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 :


```
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)


----------



## Gast2 (20. Sep 2010)

ryane hat gesagt.:


> Ich kann kein Exception abfangen
> 
> hier is die Meldung von Netbeans wenn , der port bereit verwendet wird.
> 
> ...




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.


----------



## ryane (21. Sep 2010)

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 ?


----------



## Gast2 (21. Sep 2010)

```
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.


----------



## ryane (21. Sep 2010)

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.


----------



## Michael... (21. Sep 2010)

Warum interpretieren, wenn man doch mit 
	
	
	
	





```
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.


----------



## ryane (21. Sep 2010)

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


----------



## HoaX (21. Sep 2010)

SocketException erbt von IOException also sollte es reichen IOException abzufangen. Nimm doch mal nen Debugger und schau nach wer die Meldung ausgibt.


----------

