【问题标题】:Network tcp socket application retry method网络tcp socket应用重试方法
【发布时间】:2015-04-28 12:32:11
【问题描述】:

我正在编写一个基于 Windows 的客户端 (c++) 和服务器 (c#) 应用程序,它们将通过 tcp 数据包相互通信。在这里,客户端正在发送数据,服务器需要确认。

现在,为了这个目的,我在客户端启动时在其生命周期内进行了一次“socket()”和“connect()”调用。 'send()' 和 'recv()' 调用方法中保留了一些错误检查和重试。请注意,一个客户端将发送一组(多个数据包)数据并一次退出。

现在我的问题是:

  1. 如果服务器在某些 PC 上持续运行(例如 windows 服务),我是否真的需要考虑连接 故障(网络故障)并创建一个新的套接字并连接 相应地来自客户?
  2. 如果是这样,我是否需要考虑从开始或从客户端上次未能通信的点重新发送数据 时间?

我想知道世界各地人们在处理网络应用程序的这种情况时使用的一般方法。

【问题讨论】:

    标签: c# c++ sockets tcp


    【解决方案1】:

    我真的需要考虑连接故障并创建一个新的套接字并从客户端进行相应的连接吗?

    取决于您的数据有多宝贵。如果您想确保它最终到达服务器,并且在发送时发生错误,那么您可以认为它“未发送”。

    如果是这样,我是否需要考虑从开始重新发送数据,或者从客户端上次通信失败的地方重新发送数据?

    这完全取决于您的应用程序逻辑和应用程序协议的工作方式。根据您的描述,我们无法知道您如何发送数据以及服务器如何识别它已经看到的数据。

    【讨论】:

      【解决方案2】:

      我真的需要考虑连接故障吗(网络 失败)并创建一个新的套接字并相应地从 客户?

      你当然不需要在连接关闭后创建一个新的套接字;您可以使用现有的套接字重新连接。

      【讨论】:

        猜你喜欢
        • 2015-07-07
        • 2021-04-12
        • 2019-04-10
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 2015-11-22
        相关资源
        最近更新 更多