我用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的状态,上面已经值链接为没状态了,所以会从连。
但是,从连后,会抛出这样的一个异常:“在一个已有的链接上做了一个链接请求!”
想了好久都不能解决,希望各位帮下小弟!

解决方案 »

  1.   

    重联时看一下ClientSocket 的状态,是不是OPEN的,要是就先调Close
      

  2.   

    if (ClientSocket != null && ClientSocket.Connected)
                    {
                        ClientSocket.Shutdown(SocketShutdown.Both);
                        System.Threading.Thread.Sleep(10);
                        ClientSocket.Close();
                    }再执行Open()
      

  3.   

    不知道所指的Open()方法是不是,所说的Socket的BeginConnect()方法?
    在VS 2005里Socket是没有Open()方法的!
    为什么我新初始化一个Socket赋予后,还会出现在已经链接的请求上做了一个链接请求?
      

  4.   

    对Open()是指你再重新连接socket
      

  5.   

    我想问一下,大家在处理Socket通信时,如果远程主机重启,大家是如休处理的?
    即:客户端这里捕捉到异常后,如果再继续重连?
      

  6.   

    Close掉这个Socket,再从新New一个Socket去连接!