PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Sockets: Warten auf beliebig viele Clients nur mit Endlosschleife möglich?


mittelding
2010-11-26, 21:03:00
Hallo!

Gerade arbeite ich mit Sockets in Java und bin dabei, einen Server zu basteln, welcher beliebig viele Clients bedienen soll.

Die Clients verbinden sich automatisch mit dem Server, dieser gibt immer nur Antworten.

Gibt es da auf Serverseite nur diese Möglichkeit?


while(true) {
socket clientSocket = serverSocket.accept();
// client verarbeiten z.B. in neuem Thread
}


Ich weiß auch nicht, entweder bin ich zu "event-verwöhnt" aufgrund .NET, oder aber das ist wirklich etwas unsauber mit dieser Endlosschleife.
Was meint ihr dazu? Könnte das Probleme geben, geht wirklich kein Client verloren wenn mehrere simultan connecten, oder oder oder?

Vielen Dank!

Trap
2010-11-26, 21:07:20
Gibt auch nonblocking sockets:
http://www.java2s.com/Code/Java/Network-Protocol/Nonblockserver.htm

Frameworks außenrum: http://mina.apache.org/related-projects.html

Ganon
2010-11-26, 22:52:18
Jo, SocketChannel ist im Prinzip das, was man von den select-Zeug in C kennt. Ist im Prinzip das auch gekapselt und dementsprechend SEHR schnell, aber auch relativ kompliziert.

Aber was an einer Endlosschleife jetzt "unsauber" ist, weiß ich nicht. Ich mein, ob du Endlosschleife in einer Funktion steckt, oder ob sie von dir kommt, ist doch im Prinzip Jacke wie Hose. >Irgendwo< ist sie ;)

Und nein, es geht kein Client verloren. Es ist alles so standardisiert, dass ein Client auf ein Accept ein Weilchen wartet, bevor er den Timeout wirft. Mit SocketChannel gibst du dem Client nur fix einen Channel und schaltet schon wieder auf Accept. Also zumindest solltest du das so programmieren ;)