繁体   English   中英

Qt QTcpSocket异步写入

[英]Qt QTcpSocket async write

我正在尝试将动态数据写入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)时,会发生奇怪的事情,有时写入的数据超出了我的预期,有时丢失了一些数据,有时过一会儿什么也没写,并且...

我只想将动态缓冲区写入套接字,是否还有另一种方法?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM