2013-06-04 31 views
1

試圖讀取傳輸斷開之前的所有數據:的Qt - QTcpSocekt無法檢測到連接丟失

while(socket->state() == QTcpSocket::ConnectedState) 
    if (socket->bytesAvailable() > 0) 
     qDebug("Read from client: %s", QString(socket->readAll()).toStdString().c_str()); 

但當我從另一端斷開,似乎socket->stated()還停留QTcpSocket::ConnectedState,我怎麼能檢測插座從另一端斷開?

PS:
我必須使用信號/插槽機制嗎?是否有可能避免信號/插槽機制?

回答

3

A while這種循環完全阻止Qt的event loop執行任何處理,這是不推薦的。您可以在while循環內手動撥打QCoreApplication::processEvents(),這可能會允許您的套接字狀態進行,但這會產生您可能並不期待的副作用(如您的應用程序處理可能與事件處理程序和信號相關的其他事件)其他類)。

建議您創建一個插槽來處理從套接字(連接到套接字的readyRead()信號)讀取的數據,並創建另一個插槽來處理套接字狀態(連接到套接字的stateChanged()信號)的更改。