免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: mysll
打印 上一主题 下一主题

[C++] http怎样判断请求的页面已经接受完毕了呢 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-06-10 09:46 |只看该作者
1、判断数据包的长度,如果没有长度
2、read 的长度为0 的时候,表示http请求接收完毕。
http1.0是每个请求一个链接,返回的响应完后就会关闭这个链接。
http1.1是对每一个用户一个链接,请求的响应接收完毕后服务器也会关闭这个链接。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
22 [报告]
发表于 2008-06-10 10:46 |只看该作者
这个很简单

if ("Connection: closed") 传输不定长度实体直到连接关闭
if ("Content-Length: xxyy") 传输xxyy个字节作为实体
if ("Transfer-Encoding: chunked") 分段传输实体,直到分段长度为零

稍微麻烦的就是分段传输gzip压缩后的实体

论坛徽章:
0
23 [报告]
发表于 2008-06-10 11:11 |只看该作者
原帖由 mysll 于 2008-6-5 13:09 发表
用http协议获取源码,用了新浪的做测试,头部没有提供文件长度.
设置了接收缓冲区为4096(异步socket),
所以新浪的首页接收了多次后结束,其中前几次长度都是4096,最后一次小于4096,本来想以此做为条件来判断
可 ...



超时检查... 用我的evtimer吧,哈哈

论坛徽章:
0
24 [报告]
发表于 2008-06-10 14:40 |只看该作者
对于分段传输的http报文,http头之后是16进制表示的该段的长度,之后是回车换行,再之后是段的内容,再之后又是新段的长度,。。。我是这么循环接收的,直到段的长度为0,不知道有没有别的办法

论坛徽章:
0
25 [报告]
发表于 2008-06-11 09:45 |只看该作者
原帖由 gale56 于 2008-6-10 09:46 发表
1、判断数据包的长度,如果没有长度
2、read 的长度为0 的时候,表示http请求接收完毕。
http1.0是每个请求一个链接,返回的响应完后就会关闭这个链接。
http1.1是对每一个用户一个链接,请求的响应接收完毕 ...

没看出有什么区别?

论坛徽章:
0
26 [报告]
发表于 2008-06-11 18:21 |只看该作者
原帖由 GongWithTheWind 于 2008-6-10 14:40 发表
对于分段传输的http报文,http头之后是16进制表示的该段的长度,之后是回车换行,再之后是段的内容,再之后又是新段的长度,。。。我是这么循环接收的,直到段的长度为0,不知道有没有别的办法



你说的是http的头.... 不是数据

HTTP协议的头是用\r\n分割行,遇到空行也就是单独的\r\n的时候表示头结束,然后就是数据了, 一般判断方法是\r\n\r\n表示头结束.
有的HTTP返回数据是不会有长度的,这个需要等待服务端关闭或者自己超时关闭连接,目前只能这么做.
很多标准的HTTPD是会发完数据关闭连接的,这个时候会read == 0 表示对端关闭连接了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP