【发布时间】:2020-12-10 16:11:33
【问题描述】:
我正在使用 C# Socket 类(使用异步方法和 SocketAsyncEventArgs 类)实现客户端-服务器应用程序。我必须同时实现 TCP 和 UDP 功能。
我的用法是以数据包的形式从服务器向客户端发送一些命令,反之亦然,对重要命令使用 TCP,对非重要命令使用 UDP。
据说 Nagle 算法可能会导致 TCP 数据包的多个发送合并到一个接收,所以我为 TCP 套接字设置了NoDelay(虽然我从未经历过!)
另一个问题可能是 IP 碎片,但我认为组装碎片发生在接收之前的某个地方。因此,一次发送和接收最多 64KB 的数据必须是安全的!
我的问题::我能否假设在 100% 的情况下,每个 一个 Receive 对应于 一个 Send? (我知道一次发送可能导致 UDP 丢失数据包的零接收)
我问的原因:我应该实施 1)拆分合并数据包还是 2)合并拆分接收中的数据包,还是有一些 情况?
P.S:我将Socket.ReceiveAsync 用于 TCP,Socket.ReceiveFromAsync 用于 UDP 数据包。
【问题讨论】: