ServerSocket端口在运行多个线程时将状态更改为FinWait2java

问题描述

在我的一位客户的程序中,我遇到了意外的行为。

我的程序正在处理来自多个时间终端的数据,并将数据发送到Notes服务器。 该程序为每个给定的IP地址启动一个NotesThread,该线程负责通过TCP处理Notes服务器和时间终端数据之间的通信。为了退出该应用程序,我实现了另一个正在侦听特定唯一端口的线程。

由于未知原因,第一个ServerSocket在打开第二个TimeTerminal NotesThread时关闭。

Powershell中终止侦听器端口的输出如下所示:

命令while ($true) { Get-NetTCPConnection -Localport 48678,48679,48680 -ErrorAction "SilentlyContinue"; sleep 1}

  1. :: 48678 :: 0听
  2. :: 48678 :: 0听
  3. :: 48678 :: 0听
  4. :: 48679 :: 0听
  5. 127.0.0.1 48678 127.0.0.1 60977 FinWait2数据中心
  6. :: 48679 :: 0听
  7. :: 48680 :: 0听
  8. 127.0.0.1 48678 127.0.0.1 60977 FinWait2数据中心
  9. :: 48679 :: 0听
  10. :: 48680 :: 0听
  11. ...

它的外观:

  1. :: 48678 :: 0听
  2. :: 48679 :: 0听
  3. :: 48680 :: 0听
  4. :: 48678 :: 0听
  5. :: 48679 :: 0听
  6. :: 48680 :: 0听
  7. :: 48679 :: 0听
  8. :: 48680 :: 0听
  9. ....

当前解决方法:由于它仅发生在第一个给定的IP地址上,因此我刚刚添加了另一个IP地址(未使用),最终被关闭(请参见示例)。但是至少我所有的终端都保持运行。

程序是使用Java 1.6编译的。

这是TerminateThread类的代码段:

public void run() {     
    ServerSocket listenSocket = null;
    Socket clientSocket = null;

    try {
        listenSocket = new ServerSocket(port);
        clientSocket = listenSocket.accept();
    } catch (IOException ioe) { 
            // log output
    } finally {
        try {
            clientSocket.close();
            listenSocket.close();
        } catch (Exception ex) { 
            // log output
        }
    }
}

对于每个IP地址,NotesThread这样启动:

for (String IP: IPs) {
        new TimeTerminalService(IP,port,AllowLog,terminatePort,LogPath).start();
        if (serviceCounter < serviceCount) {
            try {
                Thread.sleep(5000);
                serviceCounter++;
                terminatePort++;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

我在日志文件中没有收到任何异常消息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...