2017-07-18 24 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()に電話してください。 QAbstractSocketQAbstractSocket::ClosingStateとなります。すべての保留中のデータがソケットに書き込まれた後、QAbstractSocketは実際にソケットを閉じ、QAbstractSocket::UnconnectedStateと入力し、disconnected()を出力します。接続を直ちに中止し、保留中のデータをすべて破棄する場合は、代わりにabort()に電話してください。 リモートホストが接続を閉じた場合、QAbstractSocketはソケット状態が依然としてConnectedStateなり、次いでdisconnected()信号が放出される時に、error(QAbstractSocket::RemoteHostClosedError)を放出します。

ので、私はそれを言うと思います:

  • disconnectFromHostは、あなたはそれがあることを示すエラーを発するように、サーバのための適切な行動のクライアントまたはサーバ
  • を閉じるために使用すべきものですリモートホストは接続を閉じました
+0

okです。私は願います )))) –