良い一日、
このチュートリアルを見て、TCP Threadpool サーバーを実行しました。 http://tutorials.jenkov.com/java-multithreaded-servers/thread-pooled-server.html
クライアントのリッスン/受信と処理、および応答の返しに最適です。内部には WorkerRunnable を渡すクラスがあり、基本的にはリモート ソケット アドレス (送信元) を出力します。
public void run(){
synchronized(this){
this.runningThread = Thread.currentThread();
}
openServerSocket();
while(! isStopped()){
Socket clientSocket = null;
try {
clientSocket = this.serverSocket.accept();
} catch (IOException e) {
if(isStopped()) {
System.out.println("Server Stopped.") ;
return;
}
throw new RuntimeException(
"Error accepting client connection", e);
}
this.threadPool.execute(
new WorkerRunnable(clientSocket,
"Thread Pooled Server"));
}
this.threadPool.shutdown();
System.out.println("Server Stopped.") ;
}
問題は。リモートアドレスは固定されているはずです(私は自宅のwifiルーター内で作業しています)。ただし、送信者のIPアドレスは同じままですが、ポートは変わり続けます!!
これは私にとって大きな問題です.将来のタスクのためにユーザーに応答を返すことができる必要があり、実際にこのアドレスを保存して、データを送信するために再度使用します. これを単一のTCPスレッドで実行したとき..固定されたままでした(ポート)。
スレッドプールが原因で TCP リモート アドレス ポートが変化し続けるのはなぜですか?