[转] - 如何用QTcpSocket传送图片

我们知道,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

 

 

 

posted @ 2015-01-06 09:02  澄轶  阅读(919)  评论(0编辑  收藏  举报