2012-03-15 81 views
0

我试图在同一时间一个一个地发送2个请求。我的代码如下(这是示例代码):QTcpSocket - 尝试发送一堆请求

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

问题在于。服务器只收到第一个请求。没有第二个要求。我使用wireshark嗅探并看到tcp数据包中没有第二个请求。

我该怎么做才能通过QTcpSocket逐个发送多个请求?

UPD:我在readyRead插入qDebug() << this->bytesAvailable() << "bytes";到服务器()和在客户端的每个client->write(block);qDebug() << this->bytesToWrite();。另外,我已将此添加到客户端:

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

你可以检查输出QTcpSocket ::写?它应该返回已经写入了多少个字节。 – 2012-03-15 19:11:43

+0

可以显示连接到服务器端'readyRead()'信号的插槽的代码。 – alexisdm 2012-03-15 19:56:23

回答

0

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

适当的解决方案是将块缓存到例如QByteArray中,并立即发送缓冲区。

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

,我发现自己的解决方案。我认为有人也需要这个。

解决方法很简单:

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

我们需要刷新QT套接字缓冲区,以网前与另一个数据填充它。