gpt4 book ai didi

c++ - 拔网线时如何防止windows报错10054

转载 作者:行者123 更新时间:2023-11-28 03:34:38 34 4
gpt4 key购买 nike

我有一个 C++ 应用程序,它使用 TCP 套接字将文件从一个处理器传输到另一个处理器。应用程序将在不可靠的网络上运行,因此在连接丢失和恢复时继续传输非常重要。我正在使用 ACE 来允许应用程序在 Windows 或 Linux 上运行。

目前,当我开始传输并断开两个处理器之间的网络连接时,如果我在不到 20 秒的时间内重新连接它,传输就会恢复并且一切正常。如果连接未在 20 秒内重新建立,我将收到 Windows 错误 10054,指示连接已重置。那时,套接字已经消失,一旦重新建立连接,传输将不会恢复。有没有一种方法可以覆盖它,以便我可以控制连接何时超时?

编辑:这似乎是一个 Windows 问题。我尝试将文件从 Linux VM 发送到 Windows 机器。我在传输过程中断开网线超过 5 分钟。当我重新连接它时,传输从中断处继续并完成。

最佳答案

我相信题目应该说如何处理,而不是如何预防,对吧?您肯定希望收到此错误,因为(根据您的评论)此时文件传输将处于暂停状态并且用户也会意识到这一点。为了暂停并通知用户你需要得到一个错误。

无论如何,您提到的 20 秒可能是由于您的操作系统/路由器超时造成的。该数字可能会有很大差异,您不应以任何方式依赖它。您可以尝试更新路径上每个盒子的超时时间,但这通常是不可能的,也不能真正解决您的问题(您总是会失去连接的时间超过您设置的超时时间)。

为了构建不受超时影响的解决方案,您需要在原始连接之上建立一个简单的协议(protocol),并允许从数据流的特定偏移量重新连接和恢复传输。您可以修改您的客户端以发送包含有关重传点详细信息的请求。

如果您的网络确实不可靠并且经常中断,您可以切换到 UDP。有些数据包会到达,有些会丢失。您可以收集 block 并请求重新传输尚未到达的部分数据。您可能需要多花一点时间来设计正确的协议(protocol),但该解决方案可能优于标准 TCP。

关于c++ - 拔网线时如何防止windows报错10054,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11365547/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com