PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Socket nur eine 1:1 Verbindung?



michael.becker
05-02-2007, 14:32
Hallo,

ich wollte mal fragen, ob ich das richtig verstehe:

(Ist weniger eine Java Frage, wo bei es sich hier um eine Java-Implementierung handelt)

Ich spiele hier gerade mit Java Sockets und Java ServerSockets rum.. ansich auch alles wunderbar, doch beim versuch, 2 Verbindungen mit 2 Clienten zu einem Sever aufzubauen geht nix weiter.

Client 1 redet noch mit dem Server, wärend Client 2 sich verbinden will.

Dieses kann natürlich nicht klappen, weil Client 1 ja noch redet und den Port blockiert, oder??

Ich weis nicht mehr, ob die zusammen hänge ganz stimmen(kann auch sein, das ich mir da gerade was zusammen reime) aber kann es sein, das man für diesen Zweck Childprozesse erschafft, die auf einem anderen Port lauschen, den client auf diesen Port umleitet, damit der Server unter dem standartport noch weiter verfügbar ist?

Heisst, ich müsst in meiner Applikation unter dem default Port, die verbindung engegennehmen, einen neuen Prozess von dem zu verarbeitedem Server auf einem anderen Port öffnen und die Anfrage an diesen Port weiter leiten?


mfg
micha

anda_skoa
05-02-2007, 14:36
Nein, nicht ganz.

Der ServerSocket kann beliebig viele Verbindungen annehmen, der von ihm gelieferte normale Socket hat dann Verbindung zum Client.

Wenn du natürlich im selben Thread die Client Verbindung handhabst, kann keine neue Anfrage abgearbeitet werden.

D.h. wenn du eine Verbindung annimmst, startest du für die Verbindung selbst einen neuen Thread und der Hauptthread geht wieder zurück in den ServerSocket um auf neue Verbindungen zu warten.

Ciao,
_

michael.becker
05-02-2007, 14:51
Ich Poste hier mal mein Beispiel code:

Es gibt die Klasse Server:


public Server(int port) throws IOException {
serverSocket = new ServerSocket(port);
}
public void doListen() throws IOException{
while(true){
System.out.println("Lausche auf Anfragen..");
Socket accept = serverSocket.accept();
new Process(accept).run();
}
}

Die Klasse Process kommuniziert halt mit dem Client oder was auch immer. Sie erweitert Thread(daher auch run).

Aber dieses Konstrukt ist ja falsch, weil nicht der Server im Thread läuft, sondern nur der Process.
Wie muss ich den da meinen Quelltext abändern?

michael.becker
05-02-2007, 15:00
sorry, fehler leigt bei mir.


ich rufe nicht start sondern run von thread auf.

Damit ist das Problem behoben. Sorry.