• 4098阅读
  • 0回复

TCP接发数据问题 [复制链接]

上一主题 下一主题
离线huangweibuct
 

只看楼主 倒序阅读 楼主  发表于: 2010-05-15
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
用QT写了个接发数据的客户端和服务器,客户端每隔5秒向服务器发送数据,服务器接到数据后再向客户端发送数据。
用的是TCP协议。
问题是服务器收到数据后,在想客户端发送完数据后,服务器就再也收不到客户端发来的数据了,客户端并没有停止发送数据。
服务器代码:
  1. void ClientThread::receivePicture()
  2. {
  3.     QDataStream in( socket );
  4.     in.setVersion( QDataStream::Qt_4_0 );
  5.     if( dataSize == 0 )
  6.     {
  7.         if( socket->bytesAvailable() < sizeof(quint32) )
  8.             return;
  9.         in >> dataSize;
  10.     }
  11.     if( dataSize > socket->bytesAvailable() )
  12.         return;
  13.     in>>m_clientInfo->clientLocation;;
  14.     QByteArray array = socket->read( dataSize );
  15.     QBuffer buffer(&array);
  16.     buffer.open( QIODevice::ReadOnly );
  17.     QImageReader reader(&buffer, "png");
  18.     QImage image = reader.read();
  19.     QString pictureName;
  20.     pictureName=QString::number(m_clientInfo->clientNumber)+tr(".png");//+tr("_")+clientInfo->clientLocation
  21.     m_clientInfo->clientPictureName=pictureName;
  22.     QImageWriter writer("server_pictures/"+pictureName,"png");
  23.     writer.write(image);
  24.     dataSize=0;
  25.     emit updateClientList(m_clientInfo);
  26.     
  27.          sendToClients(*clientInfoList);//执行完这个函数后,就收不到数据了
  28. }
  29. void ClientThread::sendToClients(QList<ClientInfo*> cList)
  30. {
  31.     int itemCount=cList.size();
  32.     QByteArray block;
  33.     QDataStream out(&block, QIODevice::WriteOnly);
  34.     out.setVersion(QDataStream::Qt_4_0);
  35.     out<<"q";
  36.     socket->write(block);
  37. }
  38. [/code
  39. 客户端:
  40. [code]
  41. void MySocket::sendPictures(QString pPath,QString pName,QString  pType)
  42. {
  43.     pictureName=pPath+pName;    
  44.     QBuffer buffer;
  45.     QImageWriter writer(&buffer, pType.toLocal8Bit());
  46.     QImage image(pictureName);
  47.     writer.write( image);
  48.     QByteArray data;
  49.     QDataStream stream( &data, QIODevice::WriteOnly );
  50.     stream.setVersion( QDataStream::Qt_4_0 );
  51.     stream<< (quint32)buffer.data().size()<<pName;
  52.     data.append(buffer.data());
  53.     socket->write( data );
  54. }
  55. void MySocket::recvClientsInfo()
  56. {
  57.          QDataStream in( socket);//从socket上读
  58.     in.setVersion( QDataStream::Qt_4_0 );
  59.          QString s;
  60.          in>>s;
  61. }
]
快速回复
限100 字节
 
上一个 下一个