socket问题,急!急!
现象:对方作为socket的server端在接到我的请求后即向我不断发送大量数据(不需要我进行响应),他可能是循环发送,一个劲的向缓冲区压数据,我这边目前采用的是循环接收,问题是有时能收到数据,有时收不到,延时不好加,有没有一种方式来检测缓冲区是否有数据,有数据在收,否则,等待,这样使用哪种方式好
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
yes
哪是不是就是说select就是对缓冲区进行检测
更详细的信息可以看看select的man或是msdn帮助
我这两个都没有 所以没有办法给你更深的回答
而第二次循环收到的数据为空,随后收到的数据都为空???
我想这可能是你没有对select用法认真研究的原因吧
select收到的数据为空 是不是端口已关闭
首先感谢各位。使用select好像只是对socket描述符进行可读写检查,不一定能够进行判断是否有数据,recv函数默认的就是阻塞方式吧,在写code时,我使用了select和recv的默认方式,但还是第一次只能接收很少的数据,而第二次循环收到的数据为空,随后收到的数据都为空,是不是收数据的时候已经阻塞
你的这种问题是典型的数据传输的同步问题,在大量数据的收发当中尤其突出,所以windows为我们提供了5种传输模型:select模型、WSAAsyncSelect、(还有个叫什么名字?我忘了)IO重叠、完成端口
你可以随便的选一种使用,具体的方法请你参考MSDN吧!
检测缓冲区是否有数据,有数据在收,否则,等待???
这个阻塞型socket不是可以吗
如果想控制等待时间那么可以使用select函数实现
可以从客户端去循环取,如果取不到则延时等待。
不过这样做稳定性和正确性不太好。
最好是用比较成熟的传输中间件。
循环读,读到数据,则有,没有读到,则没有,读到的都是流信息需要自己进行数据块分块处理。