我对C#比较新,所以请耐心等待。
我正在编写TCP客户端服务器应用程序,我必须确保将客户端发送的所有消息都传递到服务器。客户端将发送数据,服务器将发回ACK(在应用程序级别实现)。
我知道网络层确保(或抛出异常)端点计算机接收数据。
我想知道的是服务器计算机是否有可能从客户端接收数据,但数据无法传送到服务器应用程序(如果服务器应用程序没有任何问题)。
感谢您的回答。
答案 0 :(得分:3)
这个不应该发生,但是在高负载和低内存下会发生奇怪的事情。
满足此方法的最佳方法是在来自客户端>服务器的消息中包含序列号。
如果客户端没有收到ACK,它可以使用旧的序列号重新发送;如果服务器已收到具有相同序列号的消息,则可以忽略它。
答案 1 :(得分:2)
TCP协议处理丢失/丢弃/冲突数据包的大多数情况,因此您无需在代码级别处理此问题。但是,您需要处理连接/通信超时,传输级错误等情况。这些会被作为异常从.NET套接字库中抛出,如果您不捕获并处理它们,这将使整个应用程序崩溃。这些例外的常见错误处理只是重试连接。