# freien Port finden



## freez (11. Jun 2005)

Hallo,

mein Programm soll automatisch einen freien Port finden, auf dem der Server lauschen soll. Ich stelle mir das so vor: mein Programm lauscht auf Port xy. Wenn ein Client sich verbindet, soll automatisch ein Port gefunden werden, der frei ist, auf dem dann die kommunikation vorgenommen wird. Dann soll das Programm wieder auf xy auf neue Clients warten.

Wie kann ich abfragen, ob ein Port frei ist, bzw. mir direkt einen freien geben lassen? Ist dies eigentlich nötig, oder wird das automatisch durch java erledigt?


```
ServerSocket sk = new ServerSocket(2000);
Socket clientSocket = sk.accept();
BufferedReader in = new BufferedReader (new InputStreamReader(clientSocket.getInputStream()));
BufferedWriter out = new BufferedWriter (new OutputStreamWriter(clientSocket.getOutputStream()));
```

Oder wird das vielleicht durch die 2. Anweisung automatisch ausgeführt?


----------



## freez (11. Jun 2005)

Achso:

ist das überhaupt nötig, daß ich verschiedene Ports vergebe? Oder kann ich die komplette Komunikation über einen einzigen Port laufen lassen. Es kann ja im prinzip zig tausend Clients geben.


----------



## Bleiglanz (11. Jun 2005)

java.net + mehrere Threads

lies mal die Doku zu accept...

deine idee ist doch käse, weil deine clients ja dann nicht wissen, mit wem sie verbindung aufnehmen  sollen?

Es gibt auch eine neuere Möglichkeit mit nio, die noch besser für multiple Verbindungen geeignet ist


----------



## freez (13. Jun 2005)

Hallo Bleiglanz.

Du hast mir geholfen. Jetzt habe ich das ganze etwas besser verstanden. Die eindeutige Zuordnung läuft also über den Socket, der von accept() zurückgegeben wird. Somit ist meine Frage hinfällig.



			
				Bleiglanz hat gesagt.:
			
		

> deine idee ist doch käse, weil deine clients ja dann nicht wissen, mit wem sie verbindung aufnehmen  sollen?



Ich denke, du hast mich etwas falsch verstanden. Das was ich gemeint habe ist, daß über einen Port ein Server lauscht. Kommt ne Anfrage, meldet der Server dem Client einen neuen Port, wo dann ein ServerThread auf seine Anfrage wartet. Also der Server an sich gibt nur einen Ports aus, zu dem sich der Client Verbinden soll, um die Daten zu übertragen. Die Kommunikation selbst wird dann mit dem neuen ServerThread über einen anderen Port vorgenommen. z.B. rein fiktiv: eine Webserver lauscht auf Port 80. Kommt ein Client, gibt er ihm über 80 lediglich eine neue Portnummer XY. Der Client verbindet sich zu Port XY, wo schon ein neuer Thread läuft, der auf XY auf den Client wartet. Dann werden die Daten übertragen.
Ist die Idee so abwägig?
Mal davon abgesehen, daß sie eh hinfällig ist, da meine Eindeutige Zuordnung über den Socket von accept() da ist. Es war nur eine Idee eines Anfängers


----------



## Bleiglanz (13. Jun 2005)

nein, aber das läuft i.A. automatisch so ab


----------



## grayson (4. Jul 2005)

oh uh hab grad das selbe problemchen.... hast evtl nen direktlink zur betreffenden doku ? thx! (jaja ich weis ich bin ne faule sau....asche auf mein haupt...)


----------



## byte (4. Jul 2005)

http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#accept()

hat 10 sec gedauert. aber ich stell sie dir diesmal nicht in rechnung.


----------



## Dukel (4. Jul 2005)

Wie bei Ftp?
Evtl. einen neuen Socket öffnen und dann mit dem Hauptsocket dem Client den Port des neu geöffneten Socket mitteilen (der dann automatisch gefunden wurde).


----------

