簡體   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