QT 编程QTcpSocket 类write函数

intQUpnpControlPoint::performHTTPAction(constQByteArray&sendBuffer,QByteArray&receive... 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的东西网上很少哦
展开
 我来答
XY_WLL
推荐于2016-01-07 · TA获得超过139个赞
知道小有建树答主
回答量:118
采纳率:100%
帮助的人:114万
展开全部
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只会在超时的时候才会退出去。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式