• 4101阅读
  • 0回复

一个QT网络数据传送问题 [复制链接]

上一主题 下一主题
离线hanb99
 

只看楼主 倒序阅读 楼主  发表于: 2006-10-16
下面这两个方法在数据传送时有什么区别吗?(用++++++号分开的),请高人指点一下
开始的时候用的是上面的,一切正常,后来我将程序改成多线程的了(thread),上面的客户端就无法接到数据了,只好将代码改成下面的,就OK了,这两种方式有什么不同吗?那个应用更多一些?
服务器:
void Server::sendData(QString data, QTcpSocket &tcpSocket)
{
  QDataStream out(tcpSocketClient);
  out.setVersion(QDataStream::Qt_4_0);
  out << editString;
}
客户端:
void Client::displayData()
{
  QString disString;
  QDataStream in(tcpSocketClient);
  in >> disString;
}
+++++++++++++++++++++++++
好用的:
服务器:
void Server::sendData(QString data, QTcpSocket &tcpSocket)
{
  QByteArray block;
  QDataStream out(&block, QIODevice::WriteOnly);
  out.setVersion(QDataStream::Qt_4_0);
  out << (quint16)0;
  out << data;
  out.device()->seek(0);
  out << (quint16)(block.size() - sizeof(quint16));
  tcpSocket.write(block);
  tcpSocket.disconnectFromHost();
  tcpSocket.waitForDisconnected();
}
客户端:
void Client::readFortune()
{
  QDataStream in(tcpSocket);
  in.setVersion(QDataStream::Qt_4_0);
  if (blockSize == 0) {
    if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
        return;
    in >> blockSize;
  }
  if (tcpSocket->bytesAvailable() < blockSize)
    return;
  QString nextFortune;
  in >> nextFortune;
}
[ 此贴被XChinux在2006-10-16 21:25重新编辑 ]
快速回复
限100 字节
 
上一个 下一个