关于Socket通信的问题
我用Socket写了一个客户端和服务端,正常情况下是没问题!
但是,如果服务端关闭后,客户端会收到“远程主机强迫关闭了一个现有的链接!”的异常!
我在异常处理中是像这样处理的:
data.ConnectState = cServerState.eConnectState.NoState;
data.ReceiveState = cServerState.eReceiveState.NoState;
data.workSocket.
data.workSocket.Shutdown(SocketShutdown.Both);
data.workSocket.Close();
Socket newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
data.workSocket = newSocket;
//data.workSocket.BeginConnect(IPAddress.Parse(data.ServerIP), data.Port, new AsyncCallback(sendCallback), data);
我有一个数据监听线程,专门用于检测各个Socket的状态,上面已经值链接为没状态了,所以会从连。
但是,从连后,会抛出这样的一个异常:“在一个已有的链接上做了一个链接请求!”
想了好久都不能解决,希望各位帮下小弟!
------解决方案--------------------重联时看一下ClientSocket 的状态,是不是OPEN的,要是就先调Close
------解决方案--------------------if (ClientSocket != null && ClientSocket.Connected)
{
ClientSocket.Shutdown(SocketShutdown.Both);
System.Threading.Thread.Sleep(10);
ClientSocket.Close();
}
再执行Open()
------解决方案--------------------Close掉这个Socket,再从新New一个Socket去连接!