关于CSocket OnReceive 函数的议论

关于CSocket OnReceive 函数的讨论
本帖最后由 oyljerry 于 2012-11-15 22:10:10 编辑 我的设计是这样的,
编写一个通信程序,不需服务器,两个程序起启动直接就可以通信(聊天 传数等)
传输用UDP CSocket 实现。
具实现方法是,用一个CSocket 类 既发送 又接收。
过程是 发送一个数据包后 调用 (循环) 等待对方发回一个确认信息
确认成功 续发送下一个包,失败则重新发包,10秒未返回提示连接失败。
程序是 MFC 单线程 做的。

实现后发现一问题,代码是进入(循环)判断确认期间 重载后的OnReceive不会自动调用 无法获得确认信息。
等待10侯就提示连接失败。

各位能帮我分析一下原因吗?

期间有个插曲,当我在SendTo 数据的后面, (循环)判断确认 的前面 之间加入一个AfxMessageBox();
程序运行发送数据后,点 AfxMessageBox() 的确定后,OnReceive 就可以自动调用 受到确认信息。
不知道这是为什么。

小弟菜鸟,积分很少,请大家见谅.
   
------最佳解决方案--------------------
你发送失败后,需要继续发送,同时要有一个消息循环,这样才能出发OnReceive
------其他解决方案--------------------
UDP是不可靠的,丢失的数据是收不到OnReceive的,只有收到数据才会有OnReceive。这有UDP的例子程序Daytime:
http://download.csdn.net/detail/geoff08zhang/4571358
------其他解决方案--------------------
用不着循环判断吧,你直接在onReceive中进行确认判断不就得了
------其他解决方案--------------------
OnReceive是异步模式,用不着循环判断,有数据到来自然会进入OnReceive函数,还有就是发送失败也会进入OnReceive函数,这时你可以在这里面用GetLastError获得错误原因,估计你的程序也不大,贴出来看看就知道原因了
------其他解决方案--------------------
第一次进revice的时候以后把2次发的都收了
------其他解决方案--------------------
已解决
一楼版主说的对,主线程在进入(循环)判断后不获取消息了,我加了一个消息泵就OK了。
希望能对大家以后处理消息有帮助。
感谢大家的回复。关贴给分。