2017-07-18 1245 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

好的。我希望 )))) –

相关问题