最近在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]==