C#TCP服务器:是否需要在应用程序级别重新发送?

时间:2011-10-18 17:31:51

标签: c# tcp client-server

我对C#比较新,所以请耐心等待。

我正在编写TCP客户端服务器应用程序,我必须确保将客户端发送的所有消息都传递到服务器。客户端将发送数据,服务器将发回ACK(在应用程序级别实现)。

我知道网络层确保(或抛出异常)端点计算机接收数据。

我想知道的是服务器计算机是否有可能从客户端接收数据,但数据无法传送到服务器应用程序(如果服务器应用程序没有任何问题)。

感谢您的回答。

2 个答案:

答案 0 :(得分:3)

这个不应该发生,但是在高负载和低内存下会发生奇怪的事情。

满足此方法的最佳方法是在来自客户端>服务器的消息中包含序列号。

如果客户端没有收到ACK,它可以使用旧的序列号重新发送;如果服务器已收到具有相同序列号的消息,则可以忽略它。

答案 1 :(得分:2)

TCP协议处理丢失/丢弃/冲突数据包的大多数情况,因此您无需在代码级别处理此问题。但是,您需要处理连接/通信超时,传输级错误等情况。这些会被作为异常从.NET套接字库中抛出,如果您不捕获并处理它们,这将使整个应用程序崩溃。这些例外的常见错误处理只是重试连接。