免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4050 | 回复: 19
打印 上一主题 下一主题

[C] LINUX C 的SOCKET函数的灵异事件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-11 11:08 |只看该作者 |倒序浏览
recv(sock, recv_buff, BUFSIZE, 0)) > 0


用这个函数接收到的目标url页面内容每次不一样.比如我测试自己的一个页面.有两种情况(注: BUFSIZE长度为1024*100,数组长度绝对够)
....<gameId>8</gameId>
</SubTable>
</root>
3148//这是获取的字符串总长度,正常

<SubTable>
<name
1380//这次不正常了,这个 "1380" 很怪异,好多个页面出错都是这个长度


PS:另问个问题,我获取百度首页也是两种情况,但是....

HTTP/1.1 200 OK
Date: Wed, 11 Feb 2009 03:04:08 GMT
Server: BWS/1.0
Content-Length: 1990
Content-Type: text/html
Cache-Control: private
Expires: Wed, 11 Feb 2009 03:04:08 GMT
Content-Encoding: gzip
Set-Cookie: BAIDUID=411A4901BD5BB0A57ED05E3AB57C5E24:FG=1; expires=Wed, 11-Feb-39 03:04:08 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "


372//这是长度

HTTP/1.1 200 OK
Date: Wed, 11 Feb 2009 03:04:53 GMT
Server: BWS/1.0
Content-Length: 1990
Content-Type: text/html
Cache-Control: private
Expires: Wed, 11 Feb 2009 03:04:53 GMT
Content-Encoding: gzip
Set-Cookie: BAIDUID=C55B5B970EC85E4F6EF25829E828BF60:FG=1; expires=Wed, 11-Feb-39 03:04:53 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "

?
2362//这也是长度


第二种情况和取163首页类似,都是body,即我们通常说的网页源代码是看不到,但是却占用了长度,看header是有进行了gzip压缩,那么请问,对于有gzip压缩的网页源代码如何进行解压缩处理,并能分离header和源代码.
另外我是新手,刚学一两周,是PHPER出身,对C很多的概念很难理解,希望对于提出的一些弱智问题请高手见谅

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2009-02-11 11:13 |只看该作者
没怎么看懂。
要注意tcp是一个流协议,一次recv可能收到包的一部分

论坛徽章:
0
3 [报告]
发表于 2009-02-11 11:14 |只看该作者
原帖由 hellioncu 于 2009-2-11 11:13 发表
没怎么看懂。
要注意tcp是一个流协议,一次recv可能收到包的一部分


谢谢,确实是这个问题,我改成while来获取数据内容就正常了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-02-11 11:15 |只看该作者
看看理论书,搞清楚 tcp 的本质。
不看书直接搞编程,BUG 一大堆。

论坛徽章:
0
5 [报告]
发表于 2009-02-11 11:16 |只看该作者
另外对于gzip压缩的网页源代码的解压缩和header和body部分的分离哪位高手有空帮忙指教一下

论坛徽章:
0
6 [报告]
发表于 2009-02-11 11:40 |只看该作者
原帖由 tqjs 于 2009-2-11 11:16 发表
另外对于gzip压缩的网页源代码的解压缩和header和body部分的分离哪位高手有空帮忙指教一下

libcurl

论坛徽章:
0
7 [报告]
发表于 2009-02-11 12:27 |只看该作者

回复 #1 tqjs 的帖子

没太仔细看你说的东西。不过读取tcp很多人通常会误会一个事情,以为recv(sock, recv_buff, BUFSIZE, 0)),那么就会返回BUFSIZE个字节,除非对方已经发送完毕。事实上并不是这样,你应该反复recv,直到返回0(对方关闭socket)或者失败。

论坛徽章:
0
8 [报告]
发表于 2009-02-11 14:15 |只看该作者
header和body通过\r\n\r\n隔开
gzip解压可以查函数gzread

不过最好还是听听flw的建议

论坛徽章:
0
9 [报告]
发表于 2009-02-11 14:48 |只看该作者
原帖由 Sorehead 于 2009-2-11 14:15 发表
header和body通过\r\n\r\n隔开
gzip解压可以查函数gzread

不过最好还是听听flw的建议


谢谢,也很谢谢flw的建议,其实我也一直想系统学习,但是因为现在已经不在学校了,在公司做事,没法让你系统性地学完一个知识点再做事.只能硬着头皮来写代码

论坛徽章:
0
10 [报告]
发表于 2009-02-11 14:53 |只看该作者
原帖由 cugb_cat 于 2009-2-11 11:40 发表

libcurl


谢谢,我没看到这个,但是在/usr/local/有个curl.h,应该差不多吧,PHP里面就有curl,C也有这个库就很好了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP