【问题标题】:What VB6 socket component can reuse bound ports?什么 VB6 套接字组件可以重用绑定端口?
【发布时间】:2011-03-19 18:05:33
【问题描述】:

我正在使用 Winsock 控件更新用 VB6 编写的旧代码。本质上,我正在尝试通过本地网络连接 4 台计算机,以便计算机可以在需要时在彼此之间共享文件。最初,一旦建立连接,他们就会无限期地持有它们。但是,这些会在 12-24 小时后出错,并且无法重新建立。

更糟糕的是,整个网络都被严密的安全所包裹,我们只有一定数量的端口可以使用(他们的防火墙阻止了所有其他端口。)我怀疑网络安全负责关闭长时间处于非活动状态的连接,这是我们不稳定的原因(我们的测试在这里无限期地运行,如果我们重新启动任何计算机,它们会重新建立。)

我的想法是只在需要发送文件时按需建立连接,以避免这种可能性。我遇到的问题是you cannot connect through the same port for four minutes。因此,在四分钟的窗口内最多只能发送一个文件(除非您同时拥有所有文件,但它们是在不同时间生成的。)使用三个端口允许一次发送三个文件(每个对等方发送一个文件) ) 但随后我又被锁定了四分钟。我可以继续添加端口,但这似乎不雅,最坏的情况是他们的 IT 部门不允许。

有什么想法吗?我找不到任何其他允许可重用绑定端口的 VB6 套接字控件。

【问题讨论】:

    标签: sockets vb6 winsock


    【解决方案1】:

    “四分钟延迟”是每个连接,其中 TCP 连接是由本地 IP、本地端口号、远程 IP 和远程端口号组成的 4 元组。

    这通常只是客户端尝试使用相同的本地端口值反复建立与服务器的连接的问题。对于 Winsock 控件,您可以尝试在每次与远程服务器建立新连接之前简单地将 LocalPort 设置为 0。

    另一种可能避免连接处于 TIME-WAIT 状态的方法是确保在另一端引发 CLOSE 事件时主动关闭连接。

    使用 3 个端口发送 3 个文件似乎有点奇怪。与使用单个连接一个接一个地发送 3 个文件相比,我认为这不会为您带来任何性能。

    【讨论】:

    • 我知道这是每个连接,但问题是我们在锁定的防火墙下工作,不能LocalPort 为 0,因为那样它很可能会选择一个尚未打开的端口。 3 个端口用于将 3 个文件发送到 3 个不同的对等点 - 不是不同的对等点。当我收到来自远程套接字的关闭事件时,我会主动关闭本地套接字。
    • 如果防火墙设置为限制源端口(本地端口)数量,几乎没有任何效果。通常限制是目标端口号。虽然可能会设置防火墙以允许某些众所周知的目标端口(HTTP、HTTPS、SMTP)使用任何源端口,并限制其他任何源端口......这似乎不太可能。您的服务器需要绑定并侦听特定端口,但您的客户端 LocalPort 值应该能够在整个临时端口范围内变化。
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多