.Net下套接字异步接收的问题(ManualResetEvent类作为进程间事件开关)
偶写了一个套接字服务,主要目的是侦听客户端和设备端的连接请求并进行处理。
侦听的代码如下:
_listenSocket.Bind(localIPEP);
_listenSocket.Listen(1000);
while ( true )
{
_allDone.Reset();
_listenSocket.BeginAccept(new AsyncCallback(AcceptCallback), _listenSocket);
_allDone.WaitOne();
}
然后在回调的方法AcceptCallback中有如下代码:
_allDone.Set();
Socket socThread = (Socket)ar.AsyncState;
Socket curSoc = socThread.EndAccept(ar);
//.....
//后续的数据接收和处理功能由curSoc所在的进程处理。
现在的问题是:当我启动了服务以后,首先设备端发送连接请求注册到服务器,程序处理正常。但处理以后,设备后续发的数据包服务器都没有响应(设备每间隔一个较短的周期就发包到服务器,并且使用以前的老系统都能一直接收到设备端的数据包)。但我启动客户端的程序,向服务发请求包,这时候服务器会处理客户端的请求,同时也会响应一次设备端的发包。但响应之后又恢复到刚才的状况(不响应后续的包)。
这个问题可能是由什么引起的?怎么样才能解决?