繁体   English   中英

QTcpSocket - 尝试发送大量请求

[英]QTcpSocket - try to send bunch of requests

我试图一个接一个地发送2个请求。 我的代码如下(这是示例代码):

QTcpSocket client;
...
client->write(block);
client->write(block);

问题如下。 服务器只接收第一个请求。 没有第二个请求。 我使用wireshark嗅探并发现tcp数据包中没有第二个请求。

我必须做什么才能逐个通过QTcpSocket发送许多请求?

UPD :我插入了qDebug() << this->bytesAvailable() << "bytes"; 到readyRead()和qDebug() << this->bytesToWrite(); 在每个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

我自己找到了解决方案 我认为有人也需要这个。

解决方案很简单:

QTcpSocket client;
...
client->write(block); 
client->flush();
client->write(block);
client->flush();

我们需要将qt套接字缓冲区刷新到net,然后再填充其他数据。

根据文档,如果在多次写入之间没有返回事件循环,则需要flush()套接字。

正确的解决方案是将块缓冲到例如QByteArray并立即发送缓冲区。

QTcpSocket client;
QByteArray buffer;
...
buffer << block;
buffer << block;
client->write(buffer);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM