使用QT中QTcpSocket中的readall()函数出现接收不完全的解决办法

       最近在QT中使用TCP协议发送数据过程出现了一点问题,在这里总结一下。当接受数据过大时,使用readll()函数读取缓冲区数据时,有时会出现数据接受不完全的信号,最开始我以为是数据丢包,后面多次实验后发现是readall()函数未将缓冲区数据读取完全,读取数据流获取数据的方法还是没有readall()函数使用方便,所以,我们就从发送数据的地方着手修改,建立一个数据报。发送接收代码如下:

发送端:

//发送数据函数
void TcpClient::sendMsg(QString t_ip, int port, QStringList t_list)
{ 
    myTcpSocket->connectToHost(t_ip,port);//连接到服务端
    QString t_msg = this->setDatagram(t_list);//设置数据报
    myTcpSocket->write(t_msg.toLatin1());
}

//设置数据报函数,发送QStringList类型数据,设置数据报首尾
QString TcpClient::setDatagram(QStringList t_list)
{
    QString t_header = "##@$";
    QString t_tail = "**$#";
    QString t_str = t_list.join(",");;
    QString t_datagram = t_header+"::"+ t_Json+"::"+t_tail;
    return t_datagram;
}

接收端:

//接收数据槽函数
void TcpServer::read_data()
{
    myData.append(myTcpSocket->readAll());
    QStringList t_data = myData.split("::");
    if(t_data.size()==3)
    {
        if((t_data[0]=="##@$")&&(t_data[2]==
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值