vb.net - 应用程序的 TCP 端口状态检查。

标签 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

然后我检查了相同的命令,我的应用程序没有出现任何错误(我的应用程序正常工作)。输出是,

TCP    192.168.1.60:25025     192.168.1.79:58511     ESTABLISHED

那我该如何解决呢?这么多25025的端口是什么意思。在错误情况下,我有很多 25025 端口,如上所示。所以请帮助我理解这一点并解决问题。

最佳答案

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

如果套接字尚未从上一次应用程序调用中完成关闭,您会得到“地址已在使用中”。通常,套接字在被应用程序关闭后需要大约 4 分钟才能准备好重新使用,同时状态为 TIME_WAIT。

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

关于vb.net - 应用程序的 TCP 端口状态检查。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16184075/

相关文章:

scala - 允许与 Akka 流作为 tcp 服务器的单一连接

android - TCP 客户端发送数据,但 TCP 服务器收到空值

golang 从 net.TCPConn 中以 4 个字节作为消息分隔读取字节

java RMI概念

Android - 使用 parse 和 pubnub 在随机聊天应用程序中正确配对和连接两个用户

javascript - 如何根据服务器端 JavaScript 确认返回停止点击事件?

.net - 更新面板复制了我的控件

c# - Visual Studio - 如何在调试器中更改方法的返回值?

php - 使用推送器将所有消息保存在我的服务器上

vb.net - VB.NET中的静态构造函数