未创建TCP侦听套接字

时间:2014-09-25 13:06:55

标签: linux qt sockets network-programming time-wait

我正在开发一个Qt应用程序并遇到相当奇怪的网络问题。 让我从最终用户的角度展示它的外观。

首先,我启动服务器并验证它是否正在侦听目标端口:

[user@host server]$ sudo netstat -anp | grep 30004
    tcp        0      0 0.0.0.0:30004               0.0.0.0:*                   LISTEN      11113/./server 

然后我用telnet连接到服务器:

[user@host server]$ telnet localhost 30004
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

Netstat显示现在已建立连接。到目前为止没什么好看的:

[user@host server]$ sudo netstat -anp | grep 30004
tcp        0      0 0.0.0.0:30004               0.0.0.0:*                   LISTEN      11113/./server 
tcp        0      0 127.0.0.1:30004             127.0.0.1:34608             ESTABLISHED 11113/./server 
tcp        0      0 127.0.0.1:34608             127.0.0.1:30004             ESTABLISHED 12657/telnet        

然后,服务器根据特定于应用程序的超时断开连接。目前设定为10秒:

[user@host server]$ sudo netstat -anp | grep 30004
tcp        0      0 0.0.0.0:30004               0.0.0.0:*                   LISTEN      11113/./server 
tcp        0      0 127.0.0.1:30004             127.0.0.1:34608             TIME_WAIT   -                   

然后关闭服务器并验证侦听套接字是否已被破坏:

[user@host server]$ sudo netstat -anp | grep 30004
tcp        0      0 127.0.0.1:30004             127.0.0.1:34608             TIME_WAIT   -                   

最后我再次启动服务器,但监听端口不再显示:

[user@host server]$ sudo netstat -anp | grep 30004
tcp        0      0 127.0.0.1:30004             127.0.0.1:34608             TIME_WAIT   -                   

因此客户端无法连接到服务器:

[user@host server]$ telnet localhost 30004
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

我在这里做错了什么?我倾向于认为这是一个配置问题,而不是应用程序中的错误。 这个场景似乎适用于我的笔记本电脑的Ubuntu。上述输出也是在linux盒子上生成的。

更新:这两个环境中另外一个不同的是qt版本。在我的笔记本上我有4.8.6,在linux机器上它是4.6.2。不确定是否重要。

1 个答案:

答案 0 :(得分:0)

显然qt库的版本存在问题。我们将其升级到最新的4.x.x,现在问题似乎已得到解决。