判断非阻塞模式下socket接收完成的条件

ladfkjsoj 2013-09-24 04:17:56
在非阻塞模式下,我用while循环去接收数据,可是不知道什么条件才算接收完成,然后可以退出
...全文
500 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
K120H 2013-09-25
  • 打赏
  • 举报
回复
使用select吧,等待数据接受完成。
ladfkjsoj 2013-09-25
  • 打赏
  • 举报
回复
引用 24 楼 xianglitian 的回复:
[quote=引用 23 楼 ladfkjsoj 的回复:] [quote=引用 22 楼 xianglitian 的回复:] 这个一般都是自己定制协议来看的
在不定义协议的情况下呢,怎么办。还请指导[/quote]基本没有方法 不过既然非阻塞为什么还需要while循环 既然while循环那接收为0就是没有数据了 另外 通信为什么不制定协议 没有协议怎么通信[/quote] 其实我是想实现阻塞模式的recv,不过的加个时间控制,这样不至于接收出问题的时候阻塞在哪很久。
向立天 2013-09-25
  • 打赏
  • 举报
回复
引用 23 楼 ladfkjsoj 的回复:
[quote=引用 22 楼 xianglitian 的回复:] 这个一般都是自己定制协议来看的
在不定义协议的情况下呢,怎么办。还请指导[/quote]基本没有方法 不过既然非阻塞为什么还需要while循环 既然while循环那接收为0就是没有数据了 另外 通信为什么不制定协议 没有协议怎么通信
ladfkjsoj 2013-09-25
  • 打赏
  • 举报
回复
引用 22 楼 xianglitian 的回复:
这个一般都是自己定制协议来看的
在不定义协议的情况下呢,怎么办。还请指导
向立天 2013-09-25
  • 打赏
  • 举报
回复
这个一般都是自己定制协议来看的
ladfkjsoj 2013-09-25
  • 打赏
  • 举报
回复
这个还请大家讨论讨论啊
ladfkjsoj 2013-09-25
  • 打赏
  • 举报
回复
不好意思,昨天下午这个csdn登不上来, 其实我就想做成阻塞态的recv,但是在错误的时候有时间限制
hurricane313 2013-09-25
  • 打赏
  • 举报
回复
我感觉楼主还是没有描述清楚想干什么?
K120H 2013-09-25
  • 打赏
  • 举报
回复
数据是否接受完全,是要靠应用层来判断的。
ladfkjsoj 2013-09-25
  • 打赏
  • 举报
回复
若没人在讨论 下午五点中散分
ladfkjsoj 2013-09-25
  • 打赏
  • 举报
回复
引用 26 楼 mcs51a 的回复:
使用select吧,等待数据接受完成。
我现在使用了select,不过结果不太理想。
ladfkjsoj 2013-09-25
  • 打赏
  • 举报
回复
引用 27 楼 xianglitian 的回复:
接收出问题了还会继续阻塞?[/quote] 不会阻塞在哪,可是会等一段时间,大概20~40s不等,这个等待时间是在阻塞的。 我希望就是在2~3s内就可以检测到
向立天 2013-09-25
  • 打赏
  • 举报
回复
引用 25 楼 ladfkjsoj 的回复:
[quote=引用 24 楼 xianglitian 的回复:] [quote=引用 23 楼 ladfkjsoj 的回复:] [quote=引用 22 楼 xianglitian 的回复:] 这个一般都是自己定制协议来看的
在不定义协议的情况下呢,怎么办。还请指导[/quote]基本没有方法 不过既然非阻塞为什么还需要while循环 既然while循环那接收为0就是没有数据了 另外 通信为什么不制定协议 没有协议怎么通信[/quote] 其实我是想实现阻塞模式的recv,不过的加个时间控制,这样不至于接收出问题的时候阻塞在哪很久。 [/quote]接收出问题了还会继续阻塞?
木头菇 2013-09-24
  • 打赏
  • 举报
回复
引用 14 楼 ladfkjsoj 的回复:
[quote=引用 13 楼 movezzzz 的回复:] 根据你接受的数据量来判断的,肯定得靠协议来保证啊!
但这个确实没有协议啊, 不用协议应该也有好的方法吧, 你看在阻塞状态下为啥就可以很好里接收并且很快里结束。[/quote] 阻塞的接收也不是一次接收的就是全部的啊
Joseph-Growth 2013-09-24
  • 打赏
  • 举报
回复
按你的说法,用什么方法都不行哦!除非是只发送一次,就select在那里等。
木头菇 2013-09-24
  • 打赏
  • 举报
回复
引用 16 楼 ladfkjsoj 的回复:
[quote=引用 15 楼 spirit008 的回复:] [quote=引用 11 楼 ladfkjsoj 的回复:] 感觉你走入误区了。 1.你无法通过socket来判断,是否还有没有数据没读,谁知道对方什么时候发完啊。 2.如果是你自己写程序发,那么这个“读完所有数据”就是靠协议保证的,没有别的。
若对方有数据发送的时候socket是可读状态。不过在这里应该讨论的是一次性数据发送和接收,不过是使用非阻塞模式下的发送与接收。 [/quote] 。。。可读状态?这是什么状态?还有,哪有什么一次性发送接收,他发10字节,你又不知道自己要接收多少次,每次接收多少字节,就剩最后一个字节,这辈子发不过来,协议栈可不会帮你做什么,你只能自己定义你觉得1分钟收不全算超时还是10个小时收不全算超时。
ladfkjsoj 2013-09-24
  • 打赏
  • 举报
回复
引用 15 楼 spirit008 的回复:
[quote=引用 11 楼 ladfkjsoj 的回复:] 感觉你走入误区了。 1.你无法通过socket来判断,是否还有没有数据没读,谁知道对方什么时候发完啊。 2.如果是你自己写程序发,那么这个“读完所有数据”就是靠协议保证的,没有别的。
若对方有数据发送的时候socket是可读状态。不过在这里应该讨论的是一次性数据发送和接收,不过是使用非阻塞模式下的发送与接收。
木头菇 2013-09-24
  • 打赏
  • 举报
回复
引用 11 楼 ladfkjsoj 的回复:
大家还能不能给点思路呢
感觉你走入误区了。 1.你无法通过socket来判断,是否还有没有数据没读,谁知道对方什么时候发完啊。 2.如果是你自己写程序发,那么这个“读完所有数据”就是靠协议保证的,没有别的。
ladfkjsoj 2013-09-24
  • 打赏
  • 举报
回复
引用 13 楼 movezzzz 的回复:
根据你接受的数据量来判断的,肯定得靠协议来保证啊!
但这个确实没有协议啊, 不用协议应该也有好的方法吧, 你看在阻塞状态下为啥就可以很好里接收并且很快里结束。
movezzzz 2013-09-24
  • 打赏
  • 举报
回复
根据你接受的数据量来判断的,肯定得靠协议来保证啊!
加载更多回复(12)

18,356

社区成员

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

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