int QUpnpControlPoint::performHTTPAction(const QByteArray& sendBuffer, QByteArray& receiveBuffer, int /*contentType*/)
{
if(m_httpAddress.isEmpty() || sendBuffer.isEmpty())
{
return 0;
}
QTcpSocket socket;
socket.connectToHost(m_httpAddress, m_httpPort);
socket.setSocketOption(QAbstractSocket::LowDelayOption, 1);
if (!socket.waitForConnected())
{
return 0;
}
socket.write(sendBuffer);
socket.waitForBytesWritten();
while (socket.waitForReadyRead(60000))
{
while (socket.bytesAvailable())
{
receiveBuffer += socket.readAll();
}
}
socket.close();
return 1;
}哪位大侠解释一下这个函数作用啊,像是QT的一些基础,不过,网上关于QTcpSocket的东西网上很少哦
感谢回答
while (socket.waitForReadyRead(60000)) {
while (socket.bytesAvailable())
{
receiveBuffer += socket.readAll();
} }
这段还是有点疑问,首先那个60000应该是60秒吧,其次如果一直没有数据过来,该函数就等待60秒后就跳出while了吗?如果接到了呢?比如30秒的时候就接到了,会不会接续等待剩下的30秒呢?
1.不好意思我给看成6000了。
2.正如你所想,该while只会在超时的时候才会退出去。
比如30秒的时候就接到了,会不会接续等待剩下的30秒呢?在没超时的时候,数据已经接到了,会不会退出呢
追答The function returns true if the readyRead() signal is emitted and there is new data available for reading; otherwise it returns false (if an error occurred or the operation timed out).这是官方文档的解释,只有在出现错误或者操作超时时才会返回false(也就是退出该while循环)。具体的你可以看看帮助文档。