在我上一篇blog里面叙述了我使用socket传送图片的过程,但是有一个bug,就是我每次接收图片的时候在最后一个图片帧都会等待waitForReadyRead()中设定的时长,这样作是不合理的,所以对它进行修改如下。
1,发送端在图片数据前加上图片长度信息;
2,接收端收到图片长度和数据包里描述长度相同后停止接收
这样就避免了最后一帧数据的等待。
1,发送端在图片数据前加上图片长度信息;
2,接收端收到图片长度和数据包里描述长度相同后停止接收
这样就避免了最后一帧数据的等待。
代码如下:
发送端:
void Widget::on_pushButton_clicked()
{
qDebug()<<"sendPicture clicked";
QPixmap pix(tr("th.jpg"));
QBuffer buffer;
buffer.open(QIODevice::ReadWrite);
pix.save(&buffer,"jpg");
quint32 pix_len = (quint32)buffer.data().size();
qDebug("image size:%d",pix_len);
char buf[10];
memcpy(buf,&pix_len,4);
QByteArray dataArray(buf,pix_len);
dataArray.append(buffer.data());
client->connectToHost(QHostAddress("192.168.1.102"),8001);
if(!client->waitForConnected(3000)){
qDebug()<<"connect fail";
return;
}
qDebug(