【问题标题】:TCP port state check for an application.应用程序的 TCP 端口状态检查。
【发布时间】:2013-04-17 12:53:10
【问题描述】:

我在 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 端口,如上所示。所以请帮助我理解这一点并解决问题。

【问题讨论】:

    标签: vb.net tcp chat port netstat


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多