用QT写了个接发数据的客户端和服务器,客户端每隔5秒向服务器发送数据,服务器接到数据后再向客户端发送数据。
用的是TCP协议。
问题是服务器收到数据后,在想客户端发送完数据后,服务器就再也收不到客户端发来的数据了,客户端并没有停止发送数据。
服务器代码:
- void ClientThread::receivePicture()
- {
- QDataStream in( socket );
- in.setVersion( QDataStream::Qt_4_0 );
- if( dataSize == 0 )
- {
- if( socket->bytesAvailable() < sizeof(quint32) )
- return;
- in >> dataSize;
- }
- if( dataSize > socket->bytesAvailable() )
- return;
- in>>m_clientInfo->clientLocation;;
- QByteArray array = socket->read( dataSize );
- QBuffer buffer(&array);
- buffer.open( QIODevice::ReadOnly );
- QImageReader reader(&buffer, "png");
- QImage image = reader.read();
- QString pictureName;
- pictureName=QString::number(m_clientInfo->clientNumber)+tr(".png");//+tr("_")+clientInfo->clientLocation
- m_clientInfo->clientPictureName=pictureName;
- QImageWriter writer("server_pictures/"+pictureName,"png");
- writer.write(image);
- dataSize=0;
- emit updateClientList(m_clientInfo);
-
- sendToClients(*clientInfoList);//执行完这个函数后,就收不到数据了
- }
- void ClientThread::sendToClients(QList<ClientInfo*> cList)
- {
- int itemCount=cList.size();
- QByteArray block;
- QDataStream out(&block, QIODevice::WriteOnly);
- out.setVersion(QDataStream::Qt_4_0);
- out<<"q";
- socket->write(block);
- }
- [/code
- 客户端:
- [code]
- void MySocket::sendPictures(QString pPath,QString pName,QString pType)
- {
- pictureName=pPath+pName;
- QBuffer buffer;
- QImageWriter writer(&buffer, pType.toLocal8Bit());
- QImage image(pictureName);
- writer.write( image);
- QByteArray data;
- QDataStream stream( &data, QIODevice::WriteOnly );
- stream.setVersion( QDataStream::Qt_4_0 );
- stream<< (quint32)buffer.data().size()<<pName;
- data.append(buffer.data());
- socket->write( data );
- }
- void MySocket::recvClientsInfo()
- {
- QDataStream in( socket);//从socket上读
- in.setVersion( QDataStream::Qt_4_0 );
- QString s;
- in>>s;
- }
]