正文

尚未解决:服务器端异步方式的异常-不执行回调2007-10-22 20:52:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/tujun/30301.html

分享到:

单位上一个用于通讯的服务器上的程序出了问题:

服务器程序使用UDP服务端,用的是异步Socket模式,服务器刚搭建好的时候没什么问题,最近由于通讯客户端增多(da大概1500个左右)后,出现这样的问题:

mySocket.Bind(ipe);
    mySocket.BeginReceiveFrom(obj.buffer,0,UdpTranslateObj.BUFFER_SIZE,SocketFlags.None,
     ref obj.endPoint,new AsyncCallback(ReceiveCallBack),obj);

private void ReceiveCallBack(IAsyncResult ar)
  {
   UdpTranslateObj obj = (UdpTranslateObj)ar.AsyncState;
   try
   {
    int k = obj.udpSock.EndReceiveFrom(ar,ref obj.endPoint);
    if(k > 0)
    {
     ReceiveEventArgs e = new ReceiveEventArgs();
     e._ReceiveBytes = new byte[k];
     Array.Copy(obj.buffer,0,e._ReceiveBytes,0,k);
     e._RemoteEndPoint = obj.endPoint;
     OnReceive(e);
    }
   }
   catch(SocketException oe)
   {
    if(oe.ErrorCode == 10054 )
    {
     if(this.ActiveSymbol)
     {
      try
      {
       obj.udpSock.BeginReceiveFrom(obj.buffer,0,UdpTranslateObj.BUFFER_SIZE,SocketFlags.None,
        ref obj.endPoint,new AsyncCallback(ReceiveCallBack),obj);
      }
      catch
       (Exception oee)
      {
       this.mySocket.Close();
       this.mySocket = null;
       System.Threading.Thread.Sleep(500);
       Start();
       return;

      }
     }
    }
   }
   catch(Exception oe)
   {
   WriteErrLog("UDP接收错误:" + oe.ToString());    
   }
   if(this.ActiveSymbol)
   {
    try
    {
     obj.udpSock.BeginReceiveFrom(obj.buffer,0,UdpTranslateObj.BUFFER_SIZE,SocketFlags.None,
      ref obj.endPoint,new AsyncCallback(ReceiveCallBack),obj);
    }
    catch
     (Exception oe)
    {
     this.mySocket.Close();
     this.mySocket = null;
     System.Threading.Thread.Sleep(500);
      }
   }
   
  }

问题:程序启动时没问题,大概运行2~3小时后出现这个问题

使用sock.BeginReceiveFrom后未执行回调函数ReceiveCallBack

不知道怎么回事?

 

2007-10-22:

怀疑一:程序中其它地方投递的异步操作太多,以至于windows操作系统线程池被占满而得不到执行?  此怀疑尚未证实..

阅读(3271) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册