私のアプリケーションでServerSocket
を使用する際に問題があります。別のスレッドでServerSocketを作成しますか?
私はアプリケーションのコンストラクタにServerSocket
を作成しています。ソケットのコンストラクタは、クライアントが接続するのを待つためにaccept()
メソッドを呼び出します。
問題は、クライアントが接続するまで、accept()
メソッドがアプリケーション全体をフリーズしていることです。だから別のスレッドでServerSocket
全体を作成する代わりに、ServerSocket
のコンストラクタとそのaccept()
メソッドがメインアプリケーションの横に呼び出されているかどうかを尋ねたいと思いますか?
編集:アドバイスオリヴィエへ
おかげで、実行可能に.acceptを入れてclientconnectionsを処理するスレッドプールを作成します。今私のコードザッツ
:罰金を実行している
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.");
}
}
};
何もかも!ありがとう!
のですか?特定の問題に直面していますか? – Ankit
java.nio.channels.AsynchronousServerSocketChannelを見て、それがあなたの必要条件を満たすかどうかを確認してください。 – Crollster
または、より良いまだ、この質問を見て:http://stackoverflow.com/questions/8940747/how-should-i-use-asynchronousserversocketchannel-for-accepting-connections – Crollster