单位上一个用于通讯的服务器上的程序出了问题: 服务器程序使用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操作系统线程池被占满而得不到执行? 此怀疑尚未证实..

评论