总是出现这个问题!代码如下,帮偶看下吧  
public  void  Start()  
{  
           if  (!Active)  
           {  
                       Active  =  true;  
                       mainSocket  =  new  Socket(AddressFamily.InterNetwork,SocketType.Stream,  ProtocolType.Tcp  );  
                       IPEndPoint  ipLocalEndPoint  =  new  IPEndPoint(IPAddress.Any,8800);    
                       mainSocket.Bind(ipLocalEndPoint);  
                       mainSocket.Listen(5000);  
                       mainSocket.Soc.BeginAccept(new  AsyncCallback(AcceptCallback),mainSocket);//接收请求
            }  
}  
 
//  <summary>  
///  BeginAccept回调函数  
///  </summary>  
///  <param  name="ar">IAsyncResult实例</param>  
public  void  AcceptCallback(IAsyncResult  ar)    
{  
           try  
           {  
                       //得到客户端请求的套接字句柄  
                       Socket  listener  =  (Socket)ar.AsyncState;  
                       Socket  handler  =  listener.EndAccept(ar);  
                       int  nSoc  =  GetSocketIndex();  
                                   //开始接受来自该客户端的数据  
                       handler.BeginReceive(  state.buffer,  0,  StateObject.BufferSize,  SocketFlags.None,new  AsyncCallback(ReceiveCallback),  state);  
           }  
           catch(Exception  err)    
           {  
                       ApplicationLog.WriteError("TCP连接回调出错:"  +  err.Message);  
           }  
           //继续接受客户端  
           mainSocket.BeginAccept(new  AsyncCallback(AcceptCallback),mainSocket);  
}  
一直出现“TCP连接回调出错:远程主机强迫关闭了一个现有的连接”的错误!为什么呀?

解决方案 »

  1.   

    // Thread signal. 这个要先定义
        public static ManualResetEvent allDone = new ManualResetEvent(false);
    ...
    public  void  Start()  
    {  
               while(Active)  
               {  
                           allDone.Reset();  
                           mainSocket  =  new  Socket(AddressFamily.InterNetwork,SocketType.Stream,  ProtocolType.Tcp  );  
                           IPEndPoint  ipLocalEndPoint  =  new  IPEndPoint(IPAddress.Any,8800);    
                           mainSocket.Bind(ipLocalEndPoint);  
                           mainSocket.Listen(5000);  
                           mainSocket.Soc.BeginAccept(new  AsyncCallback(AcceptCallback),mainSocket);//接收请求
    allDone.WaitOne();
                }  
    }//  <summary>  
    ///  BeginAccept回调函数  
    ///  </summary>  
    ///  <param  name="ar">IAsyncResult实例</param>  
    public  void  AcceptCallback(IAsyncResult  ar)    
    {  
    allDone.Set();
               try  
               {  
                           //得到客户端请求的套接字句柄  
                           Socket  listener  =  (Socket)ar.AsyncState;  
                           Socket  handler  =  listener.EndAccept(ar);  
                           int  nSoc  =  GetSocketIndex();  
                                       //开始接受来自该客户端的数据  
                           handler.BeginReceive(  state.buffer,  0,  StateObject.BufferSize,  SocketFlags.None,new  AsyncCallback(ReceiveCallback),  state);  
               }  
               catch(Exception  err)    
               {  
                           ApplicationLog.WriteError("TCP连接回调出错:"  +  err.Message);  
               }  
    } // 只是大概改了一点,不知道你第几句出错,不好说。