优化TCP客户端自动重连机制

master
lhiven 5 months ago
parent 0429d40754
commit 25cfbeae73

@ -61,10 +61,13 @@ namespace Rs.Framework
{ {
m_Socket.Connect(host, port); m_Socket.Connect(host, port);
m_IsConnected = true; m_IsConnected = true;
LogHelper.Debug($"ip:{m_HostName},port:{m_Port} connected");
OnConnected?.Invoke(m_Socket); OnConnected?.Invoke(m_Socket);
} }
catch (Exception) catch (Exception)
{ {
Thread.Sleep(3000);
LogHelper.Debug($"ip:{host},port:{port} connect fail,will reconnect");
m_Socket.Close(); m_Socket.Close();
m_Socket.Dispose(); m_Socket.Dispose();
m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
@ -91,32 +94,31 @@ namespace Rs.Framework
{ {
DataRecived?.Invoke(serverSocket, data.Take(len).ToArray()); DataRecived?.Invoke(serverSocket, data.Take(len).ToArray());
} }
else if(len <= 0)
{
m_IsConnected = false;
LogHelper.Debug($"ip:{m_HostName},port:{m_Port} disconnected");
serverSocket.Shutdown(SocketShutdown.Both);
serverSocket.Close();
serverSocket.Dispose();
OnDisconnected?.Invoke(m_Socket);
Connect(m_HostName, m_Port);//重新尝试去连接
return;
}
} }
catch (Exception ex) catch (Exception ex)
{ {
m_IsConnected = false;
LogHelper.Debug(ex.Message); LogHelper.Debug(ex.Message);
//异常退出 //异常退出
if(serverSocket.Connected) if(serverSocket.Connected)
{ {
serverSocket.Shutdown(SocketShutdown.Both); serverSocket.Shutdown(SocketShutdown.Both);
} }
serverSocket.Close(); serverSocket.Close();
serverSocket.Dispose(); serverSocket.Dispose();
Connect(m_HostName,m_Port);//重新尝试去连接
m_IsConnected = false;
OnDisconnected?.Invoke(m_Socket); OnDisconnected?.Invoke(m_Socket);
return;
}
if (len <= 0)
{
serverSocket.Shutdown(SocketShutdown.Both);
serverSocket.Close();
serverSocket.Dispose();
m_IsConnected = false;
Connect(m_HostName,m_Port);//重新尝试去连接 Connect(m_HostName,m_Port);//重新尝试去连接
OnDisconnected?.Invoke(m_Socket);
return; return;
} }
} }

Loading…
Cancel
Save