2017-07-18 172 views
1

我有一個QTcpServer應用程序和QTcpClient應用程序。 See my screenshot. 當與服務器從服務器斷開,在服務器端進行交互後,客戶端會出現事件(在客戶端套接字 - 在插槽):QTcpServer在服務器端出現:遠程主機關閉連接

void CMyClient::onSocketDisplayError(QAbstractSocket::SocketError socketError) 
{ 
    QString sErr = m_pClientSocket->errorString(); 
    m_pWin->AddMessageFormClient("Was gotten some error! " + sErr); 
} 

錯誤消息:

遠程主機關閉的連接。

之後出現的事件:

void CMyClient::onSocketDisconnected() 
{ 
    m_pWin->AddMessageFormClient("Client is disconnected!"); 
    m_pWin->UpdateDisconnectUI(); 
} 

它是在服務器端正確的行爲產生onSocketDisplayError

斷開客戶端上的代碼:

void MainWindow::on_pushButton_DisconnectFromServ_clicked() 
{ 
    m_pSocket->disconnectFromHost(); 
    m_pSocket->waitForDisconnected(3000); 
} 

回答

1

QAbstractSocket文件根據,那就是背後QTcpSocket,因此您的客戶端和服務器(重點煤礦)類:

要關閉插座,請致電disconnectFromHost()QAbstractSocket進入QAbstractSocket::ClosingState。在所有待處理數據寫入插座後,QAbstractSocket實際上關閉了插座,輸入QAbstractSocket::UnconnectedState,並且發出disconnected()。如果您想立即放棄連接,丟棄所有未決數據,請改爲撥打abort()如果遠程主機關閉連接,QAbstractSocket將發出error(QAbstractSocket::RemoteHostClosedError),在此期間套接字狀態仍將爲ConnectedState,然後disconnected()信號將發射

所以我想說的是:

  • disconnectFromHost是你應該用什麼來關閉客戶端或服務器
  • 這對服務器發出指示,一個錯誤的正確行爲遠程主機關閉連接
+0

好的。我希望 )))) –

相關問題