社区
C++ 语言
帖子详情
win32 recv 判断是否接收完成
vqt2prt25
2012-05-24 09:52:11
在阻塞模式下recv咋判断是否正常返回,百度谷歌都查过了,没啥好方法
msdn 说recv返回0是接收完成了,用的这个
apache默认正常断开连接的时间是15秒,我recv一直阻塞在那等15秒才能返回0,
如果设置了超时时间它倒是到时间返回了,不过拿到的结果是超时了,也不知道有没有接收完成
服务器端都是别人的,我不能控制的
不知道大家有啥好的方法判断是否接收完成,别等时间那么长
...全文
437
21
打赏
收藏
win32 recv 判断是否接收完成
在阻塞模式下recv咋判断是否正常返回,百度谷歌都查过了,没啥好方法 msdn 说recv返回0是接收完成了,用的这个 apache默认正常断开连接的时间是15秒,我recv一直阻塞在那等15秒才能返回0, 如果设置了超时时间它倒是到时间返回了,不过拿到的结果是超时了,也不知道有没有接收完成 服务器端都是别人的,我不能控制的 不知道大家有啥好的方法判断是否接收完成,别等时间那么长
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq120848369
2012-05-24
打赏
举报
回复
1,通信有协议,你收到完整的应答了还等什么?
2,read返回0,表明对端关闭。
2,服务端改不了,你就不写了吗?在1,2的基础上,设置客户端超时,无论你用 SO_RCVTIMEO 还是使用select监听,编码实现超时检查,都是你的选择,你有权利做一切。
jackyjkchen
2012-05-24
打赏
举报
回复
如果对方半天不给你shutdown,只能客户端自己想办法,比如自己定个超时,超过时间自己就close掉,不过这就是强制关闭而不是从容关闭了
vqt2prt25
2012-05-24
打赏
举报
回复
这个难道没办法么?????
vqt2prt25
2012-05-24
打赏
举报
回复
这个难道没办法么?
W170532934
2012-05-24
打赏
举报
回复
如果不想等,可以设置为非阻塞的啊。为什么设置为阻塞的还不想等待呢?
vqt2prt25
2012-05-24
打赏
举报
回复
自己顶
vqt2prt25
2012-05-24
打赏
举报
回复
咋没人回呢
vqt2prt25
2012-05-24
打赏
举报
回复
自己顶
vqt2prt25
2012-05-24
打赏
举报
回复
楼上的那有啥方法判断的
总不能等那么长时间吧
jackyjkchen
2012-05-24
打赏
举报
回复
tcp的标准是返回0,这时候说明服务端调用shutdown函数
vqt2prt25
2012-05-24
打赏
举报
回复
我抓过用ie浏览百度首页的包,百度是60秒那样才发送关闭socket的请求,
ie好像一直在那等着,直到正常关闭
ie好像也是没有很好的办法处理是否接受完成,就一直在那等着
jackyjkchen
2012-05-24
打赏
举报
回复
这就要看你用户对完整性的要求了
你的程序肯定有异常处理吧,你有没有考虑这么一种情况,就是传输过程中断网,这时候数据肯定不完整,你如何处理的,丢掉?还是也给用户?
当你无法判断数据完整性,又达到了超时时间,这时候用的策略应该和断网时一样
浏览器这时候的做法是接到多少用多少
vqt2prt25
2012-05-24
打赏
举报
回复
Content-Length: 72
http协议头部是这个指示数据长度的
大部分http服务器都会有的,
但是有些它就没有这个信息
这样应该就判断不出来数据是否接收完整了
协议里面也没有规定碰到哪个标示就表明数据接受完成了
jackyjkchen
2012-05-24
打赏
举报
回复
我不太懂http服务器,当你向他请求任意格式数据的时候,是发裸数据还是做了个封装,比如告诉你个要接受的长度之类的
如果有封装自然好办,没有的话没什么好办法
vqt2prt25
2012-05-24
打赏
举报
回复
如果接受的数据没有什么固定的格式的话,就不知道数据是否接受完了
如果一个http服务器返回一个txt格式的文本文件,那就判断不出它什么时候接受完成了
jackyjkchen
2012-05-24
打赏
举报
回复
[Quote=引用 15 楼 的回复:]
他超时了,你怎么能知道数据是否接受完成了
如果数据发送一半超时了,接受的数据肯定不完整
[/Quote]
作为有格式有协议的数据,你自己应该能判断是否接全了
vqt2prt25
2012-05-24
打赏
举报
回复
他超时了,你怎么能知道数据是否接受完成了
如果数据发送一半超时了,接受的数据肯定不完整
windows的阻塞和非阻塞Socket编程
NULL 博文链接:https://daojin.iteye.com/blog/720402
windows Mtr网络测试工具
参数说明: Hostname:到目的服务器要经过的每个主机IP或名称 Nr:经过节点的数量;以上图我司云服务器为例子:一共要经过6个节点,其中第一个是出口的路由器,最后到目的地节点 Loss%:ping 数据包回复失败的百分比;藉此判断,那个节点(线路)出现故障,是服务器所在机房还是国际路由干路 Sent:已传送的数据包数量
Recv
:成功
接收
的数据包数量 Best:回应时间的最小值 Avrg:平均回应时间 Worst:回应时间的最大值 Last:最后一个数据包的回应时间
多线程实现服务器和客户端聊天.pdf
多线程实现服务器和客户端聊天.pdf
windows sockets 编程之
recv
()
这几天在用VC6进行TCP/IP编程,但是过程中还是出现了不少问题。比如一个就是定义了全局变量,就不应该再次在函数中进行定义了。现在我又遇到一个新的问题,就是在使用
recv
()时出现了卡进程的情况,一开始我还以为是因为采集太快的问题导致了系统的资源不足,但在看完资源管理器之后,这个想法被我否定了。系统的的资源管理器中内存并没有太大变化。 之后我开始怀疑是
recv
()函数出现了问题,通过调试也证实
recv
函数返回值总结
函数原型:int
recv
( SOCKET s, char *buf, int len, int flags) 功能:不论是客户还是服务器应用程序都用
recv
函数从TCP连接的另一端
接收
数据。 参数一:指定
接收
端套接字描述符; 参数二:指明一个缓冲区,该缓冲区用来存放
recv
函数
接收
到的数据; 参数三:指明buf的长度; 参数四 :一般置为0。 阻塞与非阻塞
recv
返回值没有区分,都...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章