高手们:
我使用 QTcpServer.nextPendding() 返回的QTcpSocket对象作为服务端接收客户端发送消息的SOCKET,并且用该SOCKET发送消息给客户端.
客户端发送消息的函数如下所示:
deliverData(quint32 blockFlag, const QString& data, int version/* = DataStreamVersion*/)
{
// 先刷新流
m_sessionSocket->flush();
// 写入新的数据
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(version);
out << (quint32)0;
out << (quint32)blockFlag;
out << data;
out.device()->seek(0);
out << (quint32)(block.size() - (quint32)(sizeof(quint32)));
if(m_sessionSocket->write(block) < 0)
{
return false;
}
bool isSeccueed = m_sessionSocket->waitForBytesWritten();
#ifdef QT_DEBUG
qDebug() << "Data sent succeed? " << (isSeccueed ? "Yes" : "No");
#endif
return isSeccueed;
}
服务端使用
connect(m_sessionSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
连接 QTcpSocket与 onReadyRead() 函数,以读取客户端发送过来的数据,但是当客户端连接多次调用这个函数时.在服务端的onReadyRead()中总是无法
立即获取到数据,只有当客户端再次调用 deliverData() 函数向服务端发送数据时,服务端才会接收到客户端之前发送的数据,而当前发送的数据又滞留到下一次
发送,请问这是为什么?另外,服务端接收到消息时,立即给客户端发送消息,但客户端也接收不到,不知道为什么.我对 TCP 编程不是很熟悉,希望高手能够指教.非常感谢.