应用程序的TCP端口状态检查。

时间:2013-04-24 05:33:09

标签: vb.net tcp chat port netstat

我在vb.net开发了聊天应用程序。它用于在办公室内的LAN网络中连接的PC之间进行聊天。它使用TCP / IP端口25025连接到另一个。该应用程序工作正常。但在某些情况下,接收者不会收到聊天消息。

所以我只是在那台电脑上运行netstat -an命令,找到很多tcp端口及其状态。下面是它的一部分(错误情况)。我只显示了25025行。

Proto  Local Address          Foreign Address        State
TCP    0.0.0.0:25025          0.0.0.0:0              LISTENING
TCP    192.168.1.79:25025     192.168.1.60:1320      TIME_WAIT
TCP    192.168.1.79:25025     192.168.1.60:1321      TIME_WAIT
TCP    192.168.1.79:58508     192.168.1.60:25025     TIME_WAIT
TCP    192.168.1.79:58509     192.168.1.60:25025     TIME_WAIT
TCP    192.168.1.79:58510     192.168.1.60:25025     TIME_WAIT
TCP    192.168.1.79:58511     192.168.1.60:25025     ESTABLISHED

然后我检查了相同的命令,我的app没有得到任何错误(正确使用我的应用程序)。输出是,

TCP    192.168.1.60:25025     192.168.1.79:58511     ESTABLISHED

那我怎么解决呢? 25025的这么多端口表示什么?在错误的情况下,我有很多25025端口如上所示。所以请帮助我理解这个并解决问题。

1 个答案:

答案 0 :(得分:0)

检查bind()调用是否成功。我的猜测是,当你的应用程序绑定到侦听端口时,它会失败并显示错误“address in in use”。 netstat输出中的TIME_WAIT行表明情况如此。但我猜你的应用程序没有检查bind()的返回值,并盲目地继续假设调用成功。这可以解释为什么它从未收到任何东西。

如果套接字尚未从之前的应用程序调用中完成其关闭,则会获得“已在使用的地址”。通常,在应用程序关闭套接字后,大约需要4分钟才能重新使用套接字,同时状态为TIME_WAIT。

您可以使用SO_REUSEADDR套接字选项来避免此TIME_WAIT周期。