我们知道,tcp网络编程发送数据是利用套接字来实现,将要传输的东西转化为数据流再进行传输,为了确保数据传输的准确性和安全性,我们在发送数据流前发送一个quint32的常量来表示所要发送的数据的大小;当我们要发送图片时,最关键的是获得图片的大小:
QBuffer buffer;
QPixmap(":/images/1.png").save(&buffer,"BMP");
知道了图片的大小就可以传输图片了;发送端:
QDataStream stream( &data, QIODevice::WriteOnly );
stream.setVersion( QDataStream::Qt_4_0 );
stream << (quint32)buffer.data().size();
data.append( buffer.data() );
tcpSocket->write(data);
data.resize(0);
接收端:
int dataSize;
while(socket.byteAvaileble() > 0 )
{
if( dataSize == 0 )
{
QDataStream stream( &socket );
stream.setVersion( QDataStream::Qt_4_0 );
if( socket.bytesAvailable() < sizeof(quint32) )
return;
stream >> dataSize; //获取接受到的数据大小
}
if( dataSize > socket.bytesAvailable() )
return;QByteArray array = socket.read( dataSize );
QBuffer buffer(&array);
buffer.open( QIODevice::ReadOnly );
QImageReader reader(&buffer, "PNG");
QImage image = reader.read();if( !image.isNull() )
{
ui.imageLabel->setPixmap( QPixmap::fromImage( image ) );
ui.imageLabel->setText( tr("") );
dataSize=0;
}
else
{
}
}
原文地址:http://blog.csdn.net/hsl17/article/details/6739171