OnReceive没有触发?

macy 2003-12-24 07:49:16
用的是CAsyncSocket类做客户端,不停的收发数据,发现有时数据能发出去却收不到,用2000的网络监视器能看到服务器发来的数据,可就是没有执行到OnReceive函数里。哪位见过这种现象啊?到底怎么回来啊?请帮忙,谢谢!
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CounterHack 2003-12-26
  • 打赏
  • 举报
回复
如果是开始可以收,过一会儿就收不到,就要考虑你在OnRecieve()函数内部是否接收全部TCP/IP缓冲区数据,尝试使用循环:
char buf[100];
while ((int nRecv = Recv(buf, 100) > 0)
{
//处理数据
}
这样可以彻底清空缓冲区,从而不会导致阻塞了。
wujpbb7 2003-12-26
  • 打赏
  • 举报
回复
要调用 AsyncSelect(FD_READ)才能激活 OnRecieve。
macy 2003-12-26
  • 打赏
  • 举报
回复
另外还有一个疑问,我的程序所在的机器已经收到那些数据了,目的端口号也是对的,可就是不会执行OnReceive。怎么知道阻塞了呢?机器都收到那些数据了,应该没有阻塞吧?昨天开了个线程收数据(不用OnReceive),昨天测了一天没出现了,真是奇怪。
macy 2003-12-26
  • 打赏
  • 举报
回复
CAsyncSocket不是异步非阻塞方式吗?为什么还会阻塞啊?
macy 2003-12-26
  • 打赏
  • 举报
回复
关键问题是FD_READ事件没有来。在MSDN找到一些东西,应该是优先处理WM_TIMER消息,如果正在处理网络调用时来了WM_TIMER消息,有可能导致我这个问题。用了MSDN的方法,正在测试中。。
firebolt2002 2003-12-25
  • 打赏
  • 举报
回复
发生阻塞了
apa007 2003-12-25
  • 打赏
  • 举报
回复
碰到过,要么是堵塞掉了,要么就是OnReceive完后没有close就又open socket了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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