.Net下套接字异步接收的问题(ManualResetEvent类作为进程间事件开关)

kongfh 2006-05-22 11:10:42
偶写了一个套接字服务,主要目的是侦听客户端和设备端的连接请求并进行处理。
侦听的代码如下:
_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所在的进程处理。

现在的问题是:当我启动了服务以后,首先设备端发送连接请求注册到服务器,程序处理正常。但处理以后,设备后续发的数据包服务器都没有响应(设备每间隔一个较短的周期就发包到服务器,并且使用以前的老系统都能一直接收到设备端的数据包)。但我启动客户端的程序,向服务发请求包,这时候服务器会处理客户端的请求,同时也会响应一次设备端的发包。但响应之后又恢复到刚才的状况(不响应后续的包)。

这个问题可能是由什么引起的?怎么样才能解决?
...全文
306 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxcayumi 2006-07-07
  • 打赏
  • 举报
回复
怎么搞定的啊???分享一下吧!
zxcayumi 2006-07-06
  • 打赏
  • 举报
回复
111
kongfh 2006-05-23
  • 打赏
  • 举报
回复
第一点我已经做了
第二点,我用的是异步侦听。一个独立的子线程启动异步侦听。当接收后就会把响应请求转交给新的Socket线程。现在的问题就在于第一次成功响应以后,没有任何异常和错误,但就是不响应下一个请求了。
tl0 2006-05-23
  • 打赏
  • 举报
回复
自己写个控制线程。控制线程的作用
1.将所有启动的异步线程放进它的线程数组中,定时去回收无法自行结束的线程。
2.启动监听线程,控制多个线程同步监听,提高并发量。
bluexingqing 2006-05-23
  • 打赏
  • 举报
回复
友情顶贴1
kongfh 2006-05-23
  • 打赏
  • 举报
回复
终于搞定了
谢谢大家的回复!!
bluexingqing 2006-05-22
  • 打赏
  • 举报
回复
专业回贴
kongfh 2006-05-22
  • 打赏
  • 举报
回复
灌水也给分哈!!!
kongfh 2006-05-22
  • 打赏
  • 举报
回复
晕,不至于现在还没有人能解决吧
kongfh 2006-05-22
  • 打赏
  • 举报
回复
监听的是使用一个子线程来启动侦听的Socket。
有日志,但是每一步都正常。但就是一旦处理了一个设备端的包以后,就不再处理后续的包了。什么异常也没有。所以我感到很郁闷。
Knight94 2006-05-22
  • 打赏
  • 举报
回复
那么你监听是用什么写的,子线程,还是用的timer,如果是后者的话,不要用form下的timer,或者改为子线程来处理。

如果是用子线程写的,你最好写个日志文件,来分析一下哪一步出的错。
kongfh 2006-05-22
  • 打赏
  • 举报
回复
CSDN的大虾们,帮帮忙啊!!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧