我正在localhost上测试程序,当我想从客户端发送到服务器文件(例如jpg)时,我想在548之后用头将数据拆分为100byte的片段。片段出问题是这样的。服务器打印接收到的内容。

RECEIVED: 43749 | 1 | 546 | 1176 | jpg
RECEIVED: 60251 | 1 | 547 | 1176 | jpg
RECEIVED: 53346 | 1 | 548 | 1176 | jpg
RECEIVED: 55018 | 1 | 737 | 1176 | jpg


第一个是校验和,第二个消息数,第三个分片数,第四个分片最大值和最后一个文件类型。至此,所有内容都正确地设置了较小的文件。请问任何想法有什么错?

最佳答案

我假设您指的是消息的“无效”顺序(548之后是737)?

这实际上是完全正常的,因为UDP不保证消息(数据报)的顺序:


未排序–如果将两条消息发送到同一收件人,则
它们到达的顺序无法预测。


只需使用TCP即可,或实施应用程序级算法以适当地缓冲和重组数据。

另外,请注意UDP RFC(https://tools.ietf.org/html/rfc768)的内容:


该协议是面向事务的,并且交付和复制
不能保证保护。
需要可靠订购的应用
数据流的传递应使用
传输控制协议(TCP)


也就是说,您也可能会遇到数据报丢失或重复的情况(尽管这种情况很少见,除非您遇到一些网络问题)

09-10 03:32
查看更多