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

判断非阻塞模式下socket接收完成的条件
在非阻塞模式下,我用while循环去接收数据,可是不知道什么条件才算接收完成,然后可以退出
socket VC 非阻塞 接收数据

------解决方案--------------------
看你接收的数据有多少,总有网络协议来约定接受数据的大小吧?
------解决方案--------------------
你从不结贴?
------解决方案--------------------
异步模式,有事件消息,需要waitforsingleObject
------解决方案--------------------
引用:
数据大概1~20kb。就是传输的时候不知道数据的大小,所以不知道什么时候结束


每次recv,不是都有返回值告诉你收到了多少数据吗?累加够了就break
------解决方案--------------------
引用:
Quote: 引用:

异步模式,有事件消息,需要waitforsingleObject


这个是关于接收数据时不好用waitforsingleobject吧

只能用这个,你可以把超时设成0,就不用阻塞了,这次不成功下次继续wait
------解决方案--------------------
根据你接受的数据量来判断的,肯定得靠协议来保证啊!
------解决方案--------------------
引用:
大家还能不能给点思路呢判断非堵塞模式下socket接收完成的条件

感觉你走入误区了。
1.你无法通过socket来判断,是否还有没有数据没读,谁知道对方什么时候发完啊。
2.如果是你自己写程序发,那么这个“读完所有数据”就是靠协议保证的,没有别的。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

感觉你走入误区了。
1.你无法通过socket来判断,是否还有没有数据没读,谁知道对方什么时候发完啊。
2.如果是你自己写程序发,那么这个“读完所有数据”就是靠协议保证的,没有别的。



若对方有数据发送的时候socket是可读状态。不过在这里应该讨论的是一次性数据发送和接收,不过是使用非阻塞模式下的发送与接收。


。。。可读状态?这是什么状态?还有,哪有什么一次性发送接收,他发10字节,你又不知道自己要接收多少次,每次接收多少字节,就剩最后一个字节,这辈子发不过来,协议栈可不会帮你做什么,你只能自己定义你觉得1分钟收不全算超时还是10个小时收不全算超时。
------解决方案--------------------
按你的说法,用什么方法都不行哦!除非是只发送一次,就select在那里等。
------解决方案--------------------
引用:
Quote: 引用:

根据你接受的数据量来判断的,肯定得靠协议来保证啊!



但这个确实没有协议啊, 不用协议应该也有好的方法吧, 你看在阻塞状态下为啥就可以很好里接收并且很快里结束。

阻塞的接收也不是一次接收的就是全部的啊
------解决方案--------------------
这个一般都是自己定制协议来看的
------解决方案--------------------
引用:
Quote: 引用:

这个一般都是自己定制协议来看的


在不定义协议的情况下呢,怎么办。还请指导
基本没有方法
不过既然非阻塞为什么还需要while循环
既然while循环那接收为0就是没有数据了
另外
通信为什么不制定协议
没有协议怎么通信
------解决方案--------------------
使用select吧,等待数据接受完成。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这个一般都是自己定制协议来看的


在不定义协议的情况下呢,怎么办。还请指导
基本没有方法
不过既然非阻塞为什么还需要while循环
既然while循环那接收为0就是没有数据了
另外
通信为什么不制定协议
没有协议怎么通信


其实我是想实现阻塞模式的recv,不过的加个时间控制,这样不至于接收出问题的时候阻塞在哪很久。
接收出问题了还会继续阻塞?
------解决方案--------------------
数据是否接受完全,是要靠应用层来判断的。
------解决方案--------------------
我感觉楼主还是没有描述清楚想干什么?