Qt QTcpSocket async write

时间:2013-07-12 08:39:48

标签: c++ qt sockets tcp qtcpsocket

我正在尝试将动态数据写入QTcpSocket,这就是我实现它的方式:

    connect(&m_tcpSocket, SIGNAL(bytesWritten(qint64)), SLOT(written(qint64)));
//...
void MyClass::written(qint64 iBytes)
{
    if(iBytes>0)
        m_strWrite = m_strWrite.mid(iBytes);
    if(m_strWrite.length()<1)
    {
        if(m_hHandle->isDone())
            m_tcpSocket.disconnectFromHost();
    }else if(m_tcpSocket.isValid()){
        m_tcpSocket.write(m_strWrite);
    }
}
//...
void MyClass::dataReady(const QByteArray &strData)
{
    bool bWrite = m_strWrite.isEmpty();
    m_strWrite.append(strData);
    if(bWrite)
        written(0);
}

dataReady是一个插槽,只要有一些数据准备就被调用,而strData最多只有8192个字节。

这种方法工作得很好,但是当数据很大(> 500 MB)时,会发生奇怪的事情,有时候数据写得比我预期的要多得多,有时候会丢失一些数据,有时一段时间后什么都写不出来。 ..

我只想要动态缓冲区,写入socket,还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

QTcpSocket有自己的写缓冲区。只需使用m_tcpSocket.write(strData)即可。 Qt不限制写缓冲区大小。