当客户端关闭时,客户端报错服务器                    if (bytesRead > 0)
                    {
                        // 有数据,存储.  
                        string revStr = Encoding.Default.GetString(state.buffer, 0, bytesRead);
                        UntieData(revStr, state);//解包
                    }
                    else
                    {
                        state.workSocket.Shutdown(SocketShutdown.Both);
                        state.workSocket.Close();
                    }
客户端
关闭代码
                m_ClientSocket.Shutdown(SocketShutdown.Both);
                m_ClientSocket.Close();
try
            {
                // 从输入参数异步state对象中获取state和socket对象 
                state = (StateObject)ar.AsyncState;
                Socket client = state.workSocket;
                //从远程设备读取数据  
                int bytesRead = client.EndReceive(ar);//运行到这里这里报错
                if (bytesRead > 0)
                {
                    // 有数据,存储.  
                    string revStr = Encoding.Default.GetString(state.buffer, 0, bytesRead);
                    UntieData(revStr, state);//解包
                }
                else
                {
                    TraceFileClass.TraceFile(client.RemoteEndPoint.ToString() + "日志服务器关闭连接");
                    LinkOk = false;
                }
            }
            catch (Exception ex)
            {
                TraceFileClass.TraceFile(ex.Message);
            }

解决方案 »

  1.   

    谢谢楼上的建议,我在客户端关闭后,服务端是否也要关闭对应的SOCKET?我现在就是客户端关闭后,服务端关闭对应的客户端的SOCKET,然后客户端才报错的。
      

  2.   

    我的意思是在客户端关闭后,服务端是否有必要关闭对应的客户端SOCKET,不关闭的话对应的SOCKET是否会自动清理对应的资源?
      

  3.   

    问题解决,SOCKET连接我是两边都关闭的,好像两边都有这个资源,最好两边都关闭,我的问题是客户端已经关闭,服务器关闭时,回调导致客户端再次要关闭时发现资源已经释放,所以出错,谢谢bdmh的建议