QT 编程QTcpSocket 类write函数

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的东西网上很少哦

if(m_httpAddress.isEmpty() || sendBuffer.isEmpty())
{
return 0;
}//服务器地址或者需要发送的数据为空直接返回
QTcpSocket socket;
socket.connectToHost(m_httpAddress, m_httpPort);//建立一个TCP连接,主机地址是m_httpAddress,端口号是httpPort
socket.setSocketOption(QAbstractSocket::LowDelayOption, 1);//优化为最低延迟,后面的1代码启用该优化。
if (!socket.waitForConnected())
{
return 0;
}
//等待连接,如果超过3s没有客户端连接将退出。
socket.write(sendBuffer);//开始传输数据
socket.waitForBytesWritten();
while (socket.waitForReadyRead(60000))//在6s内完成数据的传输
{
while (socket.bytesAvailable())
{
receiveBuffer += socket.readAll();
}//如果传输数据不为0,那么接受数据buffer加上该值
}
socket.close();//关闭I/O数据传输以及Tcp连接,并重置主机名和端口号追问

感谢回答
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循环)。具体的你可以看看帮助文档。

温馨提示:答案为网友推荐,仅供参考
相似回答