2013-04-24 25 views
1

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

因此,我只是运行该电脑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 

然后,我检查了同样的命令,我没有得到任何错误与我的应用程序(适当的工作我的应用程序)。输出是,

TCP 192.168.1.60:25025  192.168.1.79:58511  ESTABLISHED 

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

回答

0

检查bind()调用是否成功。我的猜测是,当您的应用程序绑定到侦听端口时,它会失败,并显示错误“地址已在使用中”。 netstat输出中的TIME_WAIT行建议这样。但我猜你的应用程序没有检查bind()的返回值,而是盲目继续假设调用成功。这将解释为什么它从不接收任何东西。

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

您可以使用SO_REUSEADDR套接字选项来避免此TIME_WAIT时间段。