我正在尝试同时发送2个请求。我的代码如下(这是示例代码):
QTcpSocket client;
...
client->write(block);
client->write(block);
问题如下。服务器只接收第一个请求。没有第二个请求。我使用wireshark嗤之以鼻,发现tcp包中没有第二个请求。
我必须做什么才能逐个通过QTcpSocket发送许多请求?
UPD :我在客户端的每个qDebug() << this->bytesAvailable() << "bytes";
之后将qDebug() << this->bytesToWrite();
插入readyRead()和client->write(block);
中的服务器。另外,我将此添加到客户端:
connect(this, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten(qint64)));
void Connection::bytesWritten(qint64 count)
{
qDebug() << count << "bytes written";
}
我在第一个请求中发送ORDER_STATUS_GET_LIST常量,在第二个请求中发送ORDER_GET_LIST。我在服务器中添加了数据输出。我收到了第一个命令。
有输出列表:
客户端:
Sending ORDER_STATUS_GET_LIST
11 bytes to write
Sending ORDER_GET_LIST
68 bytes to write
68 bytes written
服务器:
68 bytes
ORDER_STATUS_GET_LIST received
答案 0 :(得分:1)
我自己找到了解决方案。我认为有人也需要这个。
解决方案很简单:
QTcpSocket client;
...
client->write(block);
client->flush();
client->write(block);
client->flush();
我们需要将qt套接字缓冲区刷新到net,然后再填充其他数据。
答案 1 :(得分:1)
根据文档,如果您没有在多次写入之间返回事件循环,则需要flush()
套接字。
正确的解决方案是将块缓冲到例如QByteArray
并立即发送缓冲区。
QTcpSocket client;
QByteArray buffer;
...
buffer << block;
buffer << block;
client->write(buffer);