我有一个QTcpServer应用程序和QTcpClient应用程序。 See my screenshot. 当与服务器交互后的客户端与服务器断开连接时,在服务器端出现事件(在客户端套接字 - 插槽中):
with cte as
(
select PersonID, ChangeId, ChangeDateTime, OldAddress,OldCity, NewAddress, NewCity
from #temp as t1
-- would be easier (ChangeId = 1) if the ChangeId was in chronological order
where ChangeId = (select max(ChangeId) from #temp as t2 where t1.PersonID = t2.PersonID)
union all
select t1.PersonID, t1.ChangeId, t1.ChangeDateTime, t1.OldAddress,
coalesce(t1.OldCity,cte.NewCity) , t1.NewAddress,
coalesce(t1.NewCity,cte.NewCity)
from cte
join #temp as t1
on t1.PersonID = cte.PersonID
and t1.ChangeId = cte.ChangeId -1
)
select PersonID, ChangeID, ChangeDateTime,
OldAddress + ', ' + OldCity as OldDetail,
NewAddress + ', ' + NewCity as NewDetail
from cte
order by PersonID, changeid
错误讯息:
远程主机关闭了连接。
之后出现一个事件:
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
答案 0 :(得分:1)
根据QAbstractSocket
的文档,这是QTcpSocket
背后的类,因此是您的客户端和服务器(强调我的):
要关闭套接字,请致电
disconnectFromHost()
。QAbstractSocket
输入QAbstractSocket::ClosingState
。将所有待处理数据写入套接字后,QAbstractSocket
实际关闭套接字,输入QAbstractSocket::UnconnectedState
,发出disconnected()
。如果要立即中止连接,丢弃所有待处理数据,请改为呼叫abort()
。 如果远程主机关闭了连接,QAbstractSocket
将发出error(QAbstractSocket::RemoteHostClosedError)
,在此期间套接字状态仍为ConnectedState
,则为{{> 1}}将发出信号。
因此我会说:
disconnected()
是您应该用来关闭客户端或服务器的