正文

尚未解决:服务器端异步方式的异常-不执行回调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操作系统线程池被占满而得不到执行?  此怀疑尚未证实..

阅读(3323) | 评论(0)


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

评论

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