网络tcp套接字应用程序重试方法

时间:2015-04-28 12:32:12

标签: c# c++ sockets tcp

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

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

现在我的问题是:

  
      
  1. 如果服务器在某台PC上连续运行(例如Windows服务),我是否真的需要考虑连接   故障(网络故障)并创建一个新的套接字和连接   相应地来自客户?
  2.   
  3. 如果是这样,我是否需要考虑从开始或从客户端最后通信失败的位置重新发送数据   时间?
  4.   

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

2 个答案:

答案 0 :(得分:0)

  

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

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

  

如果是这样,我是否需要考虑从上次开始或从客户端无法通信的位置重新发送数据?

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

答案 1 :(得分:0)

  

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

连接关闭后,您确实不需要创建新的套接字;您可以使用现有套接字重新连接。