アプリケーションでの使用に問題がありServerSocket
ます。
ServerSocket
アプリケーションのコンストラクターで を作成しています。ソケットのコンストラクターは、accept()
メソッドを呼び出して、クライアントが接続するのを待ちます。
問題はaccept()
、クライアントが接続するまでメソッドがアプリケーション全体をフリーズしていることです。ServerSocket
それで、別のスレッドで全体を作成する代わりに、メインアプリケーションの横でコンストラクターServerSocket
とそのメソッドが呼び出されるかどうかを尋ねたいと思いますか?accept()
編集:
.accept を runnable に入れ、クライアント接続を処理するスレッドプールを作成してくれた Olivier に感謝します。
それは今私のコードです:
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.");
}
}
};
すべてが順調です!ありがとう!