在QTcpServer的服务器端出现:远程主机关闭了连接。

3
我有一个QTcpServer应用程序和QTcpClient应用程序。 请看我的截图。 当客户端与服务器交互后从服务器断开连接时,在服务器端会出现事件(在客户端套接字 - 在插槽中):
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个回答

2
根据QAbstractSocket文档(该类是QTcpSocket背后的类,因此也是客户端和服务器端的类):
要关闭套接字,请调用disconnectFromHost()QAbstractSocket进入QAbstractSocket :: ClosingState。在所有挂起的数据都写入套接字之后,QAbstractSocket实际上关闭套接字,进入QAbstractSocket :: UnconnectedState,并发出disconnected()信号。如果要立即中止连接并丢弃所有挂起的数据,请改为调用abort()。如果远程主机关闭连接,则QAbstractSocket将发出error(QAbstractSocket::RemoteHostClosedError),此时套接字状态仍为ConnectedState,然后发出disconnected()信号。
因此,我认为:
- disconnectFromHost是您应该使用来关闭客户端或服务器的方法。 - 服务器发出指示远程主机关闭连接的错误是适当的行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接