Sie sollten nur einen ServerSocket
auf einen Port hören, der dem Client bekannt ist. Wenn ein Client eine Verbindung mit dem Server herstellt, wird ein neues Socket
-Objekt erstellt, und das ursprüngliche ServerSocket
kehrt wieder zum Abhören zurück. Sie sollten dann eine neue Thread
ausgliedern oder an eine Executor
die eigentliche Arbeit des Sprechens mit dem Klienten übergeben, sonst hört Ihr Server auf, nach Klientenverbindungen zu hören.
Hier ist eine sehr grundlegende Skizze des Codes, den Sie benötigen.
import java.net.*;
import java.util.concurrent.*;
public class CoordinateServer {
public static void main(String... argv) throws Exception {
// 'port' is known to the server and the client
int port = Integer.valueOf(argv[0]);
ServerSocket ss = new ServerSocket(port);
// You should decide what the best type of service is here
ExecutorService es = Executors.newCachedThreadPool();
// How will you decide to shut the server down?
while (true) {
// Blocks until a client connects, returns the new socket
// to use to talk to the client
Socket s = ss.accept();
// CoordinateOutputter is a class that implements Runnable
// and sends co-ordinates to a given socket; it's also
// responsible for cleaning up the socket and any other
// resources when the client leaves
es.submit(new CoordinateOutputter(s));
}
}
}
I-Buchsen haben hier setzen, da sie mit loszulegen sind leichter zu, aber wenn man diese gut funktioniert haben und möchten, dass Ihre Leistung steigern werden Sie wahrscheinlich das java.nio.channels
Paket untersuchen wollen. Es gibt ein gutes Tutorial over at IBM.
Ja ist es. Ein ServerSocket, aber mehrere Sockets und Threads für die Clients. – Thihara
Vorsicht bei der Erstellung von grenzenlosen Threads! Sie sollten die Gesamtzahl der Threads begrenzen. Am besten verwenden Sie hier einen ExecutorService. – fge
Soll ich einfach einen Socket erstellen, der Verbindungen verwaltet und den Benutzer dann an einen eindeutigen Socket leitet? – user2016705