发送几百KB或者几M的数据,是用TCP写好,还是用UDP自定义分包、组包好?
本人小白,学习中遇到的问题。当前的环境是局域网下的通讯。客户端之间在一些简单的文字,小一点的图片,使用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监听端口,监听成功后,发送确认消息。发送端收到消息后去连接 接收端,发送数据。当发送完毕后,释放连接。
现在就是也不知道用什么方法去处理比较好。上述方法肯定存在着或多或少的问题,还希望大佬给指出,说一下哪个方法更好,或者有其他更好的解决办法,还希望不吝赐教。