gpt4 book ai didi

Java Threadpool TCP 服务器(端口不断变化!!)

转载 作者:行者123 更新时间:2023-12-02 06:58:15 24 4
gpt4 key购买 nike

美好的一天,

我正在看这个教程来制作 TCP 线程池服务器。 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远程地址端口不断变化?

最佳答案

对于 TCP,客户端套接字端口在大多数情况下(几乎 99%,除了特定协议(protocol))是随机选择的。但您不必知道这一点,您唯一要做的就是保留 clientSocket 引用以将数据写回客户端。如果您想在连接关闭后向另一台主机发送数据,则必须在两端启动具有固定端口的ServerSocket

关于Java Threadpool TCP 服务器(端口不断变化!!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com