关于CSocket OnReceive 函数的讨论

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

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

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

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

小弟菜鸟,积分很少,请大家见谅.
...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
buaishijie 2012-11-16
  • 打赏
  • 举报
回复
已解决 一楼版主说的对,主线程在进入(循环)判断后不获取消息了,我加了一个消息泵就OK了。 希望能对大家以后处理消息有帮助。 感谢大家的回复。关贴给分。
jsyren 2012-11-16
  • 打赏
  • 举报
回复
用不着循环判断吧,你直接在onReceive中进行确认判断不就得了
yaozhiyong110 2012-11-16
  • 打赏
  • 举报
回复
第一次进revice的时候以后把2次发的都收了
searching999 2012-11-16
  • 打赏
  • 举报
回复
OnReceive是异步模式,用不着循环判断,有数据到来自然会进入OnReceive函数,还有就是发送失败也会进入OnReceive函数,这时你可以在这里面用GetLastError获得错误原因,估计你的程序也不大,贴出来看看就知道原因了
Geoff08Zhang 2012-11-15
  • 打赏
  • 举报
回复
UDP是不可靠的,丢失的数据是收不到OnReceive的,只有收到数据才会有OnReceive。这有UDP的例子程序Daytime: http://download.csdn.net/detail/geoff08zhang/4571358
oyljerry 2012-11-15
  • 打赏
  • 举报
回复
你发送失败后,需要继续发送,同时要有一个消息循环,这样才能出发OnReceive

18,356

社区成员

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

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