QT TCP服務端如何判斷客戶端已斷開連線
阿新 • • 發佈:2019-01-26
在用QT寫服務端時想要知道客戶端是否斷開連線,百度一下沒有找到方法,看了下幫助文件,得到以下方法,實測可用,如有更好的還請告知
- enum SocketError {
- ConnectionRefusedError,
- RemoteHostClosedError,//客戶端斷開時出現這個錯誤
- HostNotFoundError,
- SocketAccessError,
- SocketResourceError,
-
SocketTimeoutError, /* 5 */
- DatagramTooLargeError,
- NetworkError,
- AddressInUseError,
- SocketAddressNotAvailableError,
- UnsupportedSocketOperationError, /* 10 */
- UnfinishedSocketOperationError,
- ProxyAuthenticationRequiredError,
-
SslHandshakeFailedError,
- ProxyConnectionRefusedError,
- ProxyConnectionClosedError, /* 15 */
- ProxyConnectionTimeoutError,
- ProxyNotFoundError,
- ProxyProtocolError,
- OperationError,
- SslInternalError, /* 20 */
-
SslInvalidUserDataError,
- TemporaryError,
- UnknownSocketError = -1
- };
遠端主機關閉連線,註解:client socket 將送出通知後關閉
QAbstractSocket::error() const
Returns the type of error that last occurred.
返回最後出現的錯誤型別
下面為實現程式碼
connect(serverConnect, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(MSGError(QAbstractSocket::SocketError)));//建立槽函式,獲取錯誤資訊
void DataDisplay::MSGError(QAbstractSocket::SocketError)
{
error = serverConnect->error();
switch(error)
{
case QAbstractSocket::RemoteHostClosedError://客戶端斷開
{
QString hostAddress=serverConnect->QAbstractSocket::peerAddress().toString();
ui->m_display->insertPlainText(tr("客戶端[%1]斷開連線\r\n").arg(hostAddress));
break;
}
default:
{
error = -1;
QMessageBox::information(this, "show", serverConnect->errorString());
break;
}
}
}