日期:2014-05-19  浏览次数:20880 次

关于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去连接!