我编写了一个简单的UDP服务,它侦听从vlc播放器发送的传入UDP数据包。问题是每次提取中的数据大小约为2KB;一个93 MB文件的最终输出大小约为14 KB。=)
我应该调用setsocketOpt来增加recv缓冲区的大小吗?
我想知道,切割数据的套接字有什么问题吗?(数据丢失)还是所提取的数据需要解压缩和进一步处理?
我正在使用C++ winSock库。一些输出数据如下:
G@GGG@DGG@DGGGGGG@DGGGGG@DGGGGGG@DGGGGGG@DGGGGGGGGGG@GG@DGGGGGG@DG@EG@E
G@EGGGGGGGGGGG@DG@G@DGGGG@EG@EG@EG@B9GGGGG@DGGGGG@DGGGGG@GGGGGGG@DG@D
GG@DGGGGGGGGGG@DGGG@E2|ØzþG@EGGGGGGGG@DG@DGGGGGGGGGGGGGG@DGGGGG@D
G@B2GGG@DG@DG@EG@GGGGGGGGGGGGGGGG@GGGGGGGG@EGGGG@DGGGGGGGG@DGGGG@E
GGGGGGGGGGG@DGGGGGGGGG@DGGGGGGGGGGGG@EGGGGGGGGGGGGGGGG发布于 2014-10-14 03:32:37
UDP是一种基于消息的协议,数据包具有一定的边界。不能接收部分数据包。也就是说,要么您将得到完整的消息,要么您将得不到它。
UDP适用于可以容忍丢包或无序分组传递但不能在延迟或抖动上妥协的应用程序。
TCP适用于可以接受延迟但不能在数据包丢失或数据包排序上妥协的应用程序。因此,如果希望通过网络传输分段数据包来重新组装整个93MB文件,使其不丢弃数据包,那么TCP/SCTP是一个更好的选择。
发布于 2014-10-13 19:49:48
UPD不是一个流协议。UDP读取将返回一个数据包。数据包可能丢失,重新排序,甚至重复。您的代码必须处理这个事实。
缓冲区大小与问题无关。
https://stackoverflow.com/questions/26346084
复制相似问题