发送几百KB或者几M的数据,是用TCP写好,还是用UDP自定义分包、组包好?

一个不能再白的小白 2021-04-27 03:30:48
本人小白,学习中遇到的问题。当前的环境是局域网下的通讯。客户端之间在一些简单的文字,小一点的图片,使用UDP进行收发都没问题,但是当数据超过UDP的MTU(最大传输单元)。再去掉IP、UDP数据报的首部,可用的就剩1472个字节。
1472字节想要传输大一点的图片或者音频文件是远远不够的,所以我想到了两个方法去处理。

1.UDP 发送前获取将要发送数据的大小,自定义数据包,将每个数据包固定大小,可以计算出需要多少个数据包来完成数据的发送。给每个数据包进行标号,发送时以结构体的形式发送。接收端接收时,根据标号再重新排序。(查资料说UDP分包传输并不能保证顺序)
struct MessageType
{
int total; // 数据包总数
int number; // 数据包标号
int size; // 数据总大小
QByteArray data; // 数据 这里我使用的是Qt
};

2.是使用TCP,判断数据大小,当数据比较小时(UDP可以一次性发送),就还是使用UDP,当数据比较大时,开启线程,UDP发送消息,(附带标示),等待接收端反馈。接收端接收到后,开启线程,TCP监听端口,监听成功后,发送确认消息。发送端收到消息后去连接 接收端,发送数据。当发送完毕后,释放连接。

现在就是也不知道用什么方法去处理比较好。上述方法肯定存在着或多或少的问题,还希望大佬给指出,说一下哪个方法更好,或者有其他更好的解决办法,还希望不吝赐教。
...全文
474 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
现在就是也不知道用什么方法去处理比较好。上述方法肯定存在着或多或少的问题,还希望大佬给指出,说一下哪个方法更好,或者有其他更好的解决办法,还希望不吝赐教。 UP UP UP

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧