Ich habe ein Problem mit der Verwendung einer ServerSocket
in meiner Anwendung.ServerSocket in einem separaten Thread erstellen?
Ich erstelle die ServerSocket
im Konstruktor meiner Anwendung. Der Konstruktor des Sockets ruft die Methode accept()
auf, um darauf zu warten, dass ein Client eine Verbindung herstellt.
Das Problem ist, dass die accept()
Methode meine gesamte Anwendung einfriert, bis ein Client verbindet. Also würde ich gerne fragen, ob es eine Alternative zum Erstellen der gesamten ServerSocket
in einem separaten Thread gibt, dass der Konstruktor der ServerSocket
und seine accept()
Methode neben meiner Hauptanwendung aufgerufen wird?
Edit:
Dank Olivier für die Beratung, die .Accept in ein lauffähiges setzen und die Schaffung eines Thread die clientconnections zu behandeln.
Das ist jetzt mein Code:
public void start(){
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
objectout = new ObjectOutputStream(clientSocket.getOutputStream());
clientProcessingPool.submit(new ClientTask(clientSocket,objectout));
}
} catch (IOException e) {
System.err.println("Accept failed.");
}
}
};
Every läuft gut! Vielen Dank!
versucht Buchse bezogenen Code in separaten Thread zu verschieben? irgendein spezifisches Problem konfrontiert? – Ankit
Werfen Sie einen Blick auf java.nio.channels.AsynchronousServerSocketChannel und sehen Sie, ob es Ihren Anforderungen entspricht. – Crollster
Oder noch besser, werfen Sie einen Blick auf diese Frage: http://StackOverflow.com/Questions/8940747/how-should-i-use-asynchronousserversocketchannel-for-accepting-connections – Crollster