2013-06-04 39 views
1

我想檢測多少字節可供閱讀:QTcpSocket->信息bytesAvailable總是返回0

while(socket->ConnectedState == QTcpSocket::ConnectedState) { 
    if(socket->bytesAvailable() > 0) 
     qDebug("%d", test->bytesAvailable()); 
} 

我敢肯定套接字連接,但似乎的byteAvailable返回值始終爲0無從另一端我寫了多少字節。

但是,當我斷開後發現:

if (! socket->waitForDisconnected(-1)) { 
     qDebug("Failed to receive disconnect message from client"); 
    } 
    else { 
     qDebug("%d", socket->bytesAvailable()); 
     qDebug(socket->readAll()); 
     qDebug("Disconnected from client"); 
    } 
} 

發送到調試窗口的信息是合理的:8 ABCDEFGH

什麼可能導致這種情況發生?

PS:
這也似乎是一個死循環,因爲即使從另一端斷開連接後它仍然繼續運行。也許是因爲這個原因:QTcpSocket state always connected, even unplugging ethernet wire

+0

@thuga我使用'QRunnable'比'QThread',有事件循環在'QRunnable'? – CDT

回答

0

已經有信號readyRead(),它會在套接字有數據要讀取時通知您。你爲什麼使用while循環?

此外,您可以寫入緩衝區的大小,然後將實際緩衝區寫入套接字。然後,在閱讀的另一端,先讀循環移位#of字節,然後緩衝與此:

qint64 QIODevice::read (char * data, qint64 maxSize).