发布时间: 2013-09-28 10:01:20 作者: rapoo
判断非阻塞模式下socket接收完成的条件在非阻塞模式下,我用while循环去接收数据,可是不知道什么条件才算接收完成,然后可以退出 感觉你走入误区了。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,不过的加个时间控制,这样不至于接收出问题的时候阻塞在哪很久。接收出问题了还会继续阻塞?[解决办法]数据是否接受完全,是要靠应用层来判断的。[解决办法]我感觉楼主还是没有描述清楚想干什么?
Quote: 引用:感觉你走入误区了。1.你无法通过socket来判断,是否还有没有数据没读,谁知道对方什么时候发完啊。2.如果是你自己写程序发,那么这个“读完所有数据”就是靠协议保证的,没有别的。若对方有数据发送的时候socket是可读状态。不过在这里应该讨论的是一次性数据发送和接收,不过是使用非阻塞模式下的发送与接收。
感觉你走入误区了。1.你无法通过socket来判断,是否还有没有数据没读,谁知道对方什么时候发完啊。2.如果是你自己写程序发,那么这个“读完所有数据”就是靠协议保证的,没有别的。
Quote: 引用:根据你接受的数据量来判断的,肯定得靠协议来保证啊!但这个确实没有协议啊, 不用协议应该也有好的方法吧, 你看在阻塞状态下为啥就可以很好里接收并且很快里结束。
根据你接受的数据量来判断的,肯定得靠协议来保证啊!
Quote: 引用:这个一般都是自己定制协议来看的在不定义协议的情况下呢,怎么办。还请指导
这个一般都是自己定制协议来看的
Quote: 引用:Quote: 引用:Quote: 引用:这个一般都是自己定制协议来看的在不定义协议的情况下呢,怎么办。还请指导基本没有方法不过既然非阻塞为什么还需要while循环既然while循环那接收为0就是没有数据了另外通信为什么不制定协议没有协议怎么通信其实我是想实现阻塞模式的recv,不过的加个时间控制,这样不至于接收出问题的时候阻塞在哪很久。
Quote: 引用:Quote: 引用:这个一般都是自己定制协议来看的在不定义协议的情况下呢,怎么办。还请指导基本没有方法不过既然非阻塞为什么还需要while循环既然while循环那接收为0就是没有数据了另外通信为什么不制定协议没有协议怎么通信
图形放大后线条变粗怎么解决
COPYDATASTRUCT的生存周期,该如何解决
ATL 工程 控件加 tooltip,该怎么处理
dll菜鸟第一个dll就没调通
怎样将一个数组的数依次存入ACCESS数据
如何用VC的ComBox仿照QQ登陆界面输入
关于WritePrivateProfileString函数最
函数已有主体的异常
一个有关问题栈遭到破坏的有关问题
请问界面刷新有关问题