2013-07-01 219 views
1

我在java中实现了一个客户端服务器应用程序,它工作正常。现在,如果我做了netstat -a在外壳看到活动连接我看到有很多形式如下关闭客户端和服务器后的孤立TCP连接

TCP 127.0.0.1:54725 Sin-Host:0 LISTENING 

例如孤儿连接的,如果我创建像下面

TCP 127.0.0.1:58185 Sin-Host:0 LISTENING 
端口58185的服务器

当客户端连接到它,我得到两个连接类似如下

TCP 127.0.0.1:58185 Sin-Host:0 LISTENING 
TCP 127.0.0.1:58185 Sin-Host:58187 ESTABLISHED 
TCP 127.0.0.1:58187 Sin-Host:58185 ESTABLISHED 

现在,当我关闭我的两个客户端和服务器的第一个连接仍然存在(即在LISTENING状态不是TIMED_WAIT

我认为当我关闭客户端和服务器时,没有理由保持第一个连接。这是一个错误?它并不影响我的程序,但我只是想知道,所以我知道它的影响。

**EDIT : How long do these orphans last** 

我重新启动了我的系统,所有的孤儿都不见了。我重复了测试,发现即使在应用程序关闭后,孤儿依然存在,但系统重新启动后仍会消失。

也许我猜这是一些系统设置,它阻止它首先进入。

+0

定义'关闭我的客户端和服务器'。在每种情况下你是否真的退出了这个过程? – EJP

+0

@EJP by'close'我的意思是我通过关闭整个eclipse来杀死运行服务器的eclipse实例。 – rockstar

+0

它有多久一直听? –

回答

0

只要你有一个像

serverSocket.accept(); 

在你的代码与LISTENING连接保持一条线。

accept()导致该端口的状态为LISTENING

这两个ESTABLSHED行都用于活动连接。

+0

如果整个过程退出,这不是问题的实质。在任何情况下,说''accept()导致端口的LISTENING状态是完全不正确的。 C'listen()'API会导致LISTENING状态:它由'ServerSocket'的构造函数调用。-1 – EJP

+0

@EJP请阅读我对原始问题的评论。看起来程序还在运行,因此我的分析似乎是正确的... –

+0

不,这是不正确的,我已经告诉过你为什么。你的答案是基于错误的前提。我重复。它不是导致这种情况的'accept()',它是'ServerSocket'的存在和非关闭。 – EJP

相关问题