在qt自带的例子fortuneserver和fortuneclient里,server在client连接的时候会发送一条信息给client,用到了wrtie()函数,但是在client端接收的时候却没用read()函数,为什么?还有QDataStream定义的那个in和out是起什么作用的?如果我想在server发送给client端信息之后,client在回发server一个信息,应该怎么做?
谢谢各位
void Server::sendFortune()
{
//! [5]
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
//! [4] //! [6]
out << (quint16)0;
out << fortunes.at(qrand() % fortunes.size());
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
//! [6] //! [7]
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
//! [7] //! [8]
clientConnection->write(block);
clientConnection->disconnectFromHost();
//! [5]
}
void Client::readFortune()
{
//! [9]
QDataStream in(tcpSocket);
in.setVersion(QDataStream::Qt_4_0);
if (blockSize == 0) {
if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
return;
//! [8]
//! [10]
in >> blockSize;
}
if (tcpSocket->bytesAvailable() < blockSize)
return;
//! [10] //! [11]
QString nextFortune;
in >> nextFortune;
if (nextFortune == currentFortune) {
QTimer::singleShot(0, this, SLOT(requestNewFortune()));
return;
}
//! [11]
//! [12]
currentFortune = nextFortune;
//! [9]
statusLabel->setText(currentFortune);
getFortuneButton->setEnabled(true);
}