我有一个基于TCP套接字的客户端服务器系统。在客户端断开网络连接并重新连接时,我会自动收到来自客户端的
但是,当我查看客户端时,它显示套接字仍与服务器连接着(关于“套接字仍与服务器连接”[不是每次发生],有时显示已断开连接,有时显示已连接)。
引用:
“服务器从客户端端获得了一个
因此,我想知道
再次声明,在正常环境下一切都正常运行(例如,如果我退出客户端,则会断开套接字,服务器同样)
提前致谢。
编辑:
以下是客户端代码。实际上,这是一个定时器,它在程序生命周期内每3秒钟Tick一次,并检查套接字是否已连接,如果已断开连接,则尝试通过新的套接字实例重新连接。
SocketError.ConnectionReset
命令,并根据此命令在服务器端关闭套接字。这也没问题。但是,当我查看客户端时,它显示套接字仍与服务器连接着(关于“套接字仍与服务器连接”[不是每次发生],有时显示已断开连接,有时显示已连接)。
引用:
“服务器从客户端端获得了一个
SocketError.ConnectionReset
,但客户端仍然连接,这有意义吗?”因此,我想知道
SocketError.ConnectionReset
可能的原因以及如何处理我提到的这种问题?再次声明,在正常环境下一切都正常运行(例如,如果我退出客户端,则会断开套接字,服务器同样)
提前致谢。
编辑:
以下是客户端代码。实际上,这是一个定时器,它在程序生命周期内每3秒钟Tick一次,并检查套接字是否已连接,如果已断开连接,则尝试通过新的套接字实例重新连接。
private void timerSocket_Tick(object sender, EventArgs e)
{
try
{
if (sck == null || !sck.Connected)
{
ConnectToServer();
}
}
catch (Exception ex)
{
RPLog.WriteDebugLog("Exception occcured at: "+ System.Reflection.MethodBase.GetCurrentMethod().ToString()+"Message: "+ex.Message);
}
}
在正常情况下(没有网络断开/重新连接),如果TCP服务器从任何客户端获得SocketError.ConnectionReset,则在客户端侧,我会看到客户端套接字已断开,并尝试通过所示代码重新连接它。但是当早期发生的情况发生时,服务器收到SocketError.ConnectionReset,但客户端仍显示它仍然连接着。尽管TCP服务器显示重置命令来自确切的客户端侧。