0

我有 udp 套接字,每 1 秒发送 100 个字符串,当收到数据时,我想检查数据是否正确并测量数据包丢失

发送字符串的来源:

string toSend;
byte[] data = Encoding.ASCII.GetBytes(toSend);

据我所知,udp 无法检查数据是否正确,也无法测量数据包丢失,除非 Received 已经知道数据将 Receive

因此,对于统计信息,我每 5 秒发送一次 Receiver 已经知道的数据

数据接收时如何知道发送的数据是正确的还是丢包?

4

1 回答 1

1

在 UDP 之上添加您自己的协议,该协议包含某种序列号。如果您从零开始序列号,并发送六个数据包,那么最后一个数据包的序列号应该是 5。如果您收到序列号为 0、1 和 5 的数据包,那么您知道这六个数据包有 50% 的数据包丢失.

对于错误检查,为每个数据包添加一个简单的校验和。


此外,如果您想要更好的可靠性,那么使用序列编号方案可以轻松实现数据包重新排序,以便以错误顺序到达的数据包被重新排列为正确的顺序。实现丢失数据包的确认和重传也很容易。因此,在 UDP 之上添加它是实现非常简单的类似 TCP 协议的一种方式。许多使用 UDP 的协议实现了部分或全部这些功能。

于 2014-09-17T08:27:04.450 回答