下面是代码 :
用QT 写了个发送和接受图片,发现能正常显示的远小于不能显示的,不知哪里出问题
我每次用UDP发送128B,图片大小为30K,直到发送完成。接受端那里出现丢包现象,偶而会成功一次
请高人帮我看看,下面是代码:
发送端:
    connect(ui->sendButton,SIGNAL(clicked()),
            this,SLOT(sendDatagram()));
    connect(udpSocket,SIGNAL(bytesWritten(qint64)),         
       this,SLOT(UpdateProgress(qint64))); 
void client::sendDatagram()
{    
qDebug()<<"sending ......";    
TotalByte=0;   
havewritedByte=0;    
leftByte=0;    
outblock=0;   
loadSize=128;   //每次发送数据的大小    i
magefile=new QFile("./linux.png");   
if(!imagefile->open(QFile::ReadOnly))    
{       
 qDebug() << "open file error!";       
return;   
}   
 TotalByte=imagefile->size();
    //send datagram   
QDataStream out(&outblock,QIODevice::WriteOnly);//datastream   
out.setVersion(QDataStream:t_4_0);// set datastream setVersion   
outblock= imagefile->read(loadSize);//一次性读取128B数据   
udpSocket->writeDatagram(outblock,  QHostAddress::Broadcast,        
                    ui->ortlineEdit->text().toInt());} 
void client::UpdateProgress(qint64 havesendbyte)
{    
qDebug()<<"TotalByte is ......"<<TotalByte;    
havewritedByte+=havesendbyte;   
qDebug()<<"havewritedByte is ......"<<havewritedByte;   
leftByte=TotalByte-havewritedByte;    
qDebug()<<"leftByte is ......"<<leftByte; 
ui->sendProgressbar->setMaximum(TotalByte);   
ui->sendProgressbar->setValue(havewritedByte);  
if(leftByte>0)   
{       
  outblock= imagefile->read(qMin(leftByte,loadSize));      
  udpSocket->writeDatagram(outblock,                             
  QHostAddress::Broadcast,                        
  ui->ortlineEdit->text().toInt());   
}   
else//发送完   
 {       
    delete imagefile;        
    udpSocket->close();       
    outblock.resize(0);  
  }
}
接受端:    
//有收到数据就更新UI    
connect( udpSocket, SIGNAL( readyRead() ),           
      this, SLOT( processDatagrms_slot() ) );
connect( this, SIGNAL( haveDatagrams_signal( qint64, QByteArray ) ),       
          this, SLOT( updateServerProgress( qint64, QByteArray ) ) ); 
          
          
void server::processDatagrms_slot()
{   
while ( udpSocket->hasPendingDatagrams() )   
{        
    this->inblock.resize( this->udpSocket->pendingDatagramSize() );       
    //get 数据包大小      
      this->udpSocket->readDatagram( inblock.data(), inblock.size() );        
    
     emit haveDatagrams_signal( this->inblock.size(), inblock);
  }
//接受over ,就显示图片    
QPixmap pixmap;//pixel map  
 pixmap.loadFromData( countblock ); //load  all image  byteArray data    
  if ( !pixmap.isNull() ) //is  image  
  {      
      qDebug()<<"ui->imagelabel_3->setPixmap( pixmap ) .....";     
      ui->imagelabel_3->setPixmap( pixmap ); //将图片加载到label       
    ui->imagelabel_3->show();   
}      
  else     
   {    
          ui->imagelabel_3->setText("123...");       
      qDebug()<<"NO LOAD Image ..image is null...";     
   }
inblock.resize(0);   
countblock.resize(0);  
  bytesReceived=0;  
} 
//更新进度条
void server::updateServerProgress( qint64 byteshaveReceived, QByteArray havereceiveDatagrams )
{    
    qDebug() << "updateServerProgress  run ......";  
      countblock += havereceiveDatagrams;//累加数据包,用来显示图片  
    bytesReceived += byteshaveReceived;    
    qDebug() << "bytesReceived  is ......" << bytesReceived;
    ...........
}