3,881
社区成员
发帖
与我相关
我的任务
分享
下面这个帖子有比较详细的描述。
https://cloud.tencent.com/info/3555e5e9ac8eadf44cef14719c317ff7.html
大概这样的:Transfer-Encoding: chunked字段可以看出响应体是否为 chunked 压缩,chunked 数据很有意思,采用的格式是 长度\r\n内容\r\n长度\r\n..0\r\n,而且长度还是十六进制的,最后以 0\r\n 结尾(不保证都有)。
Content-Length: 72838
服务器已经通知你会发送的数据长度了。但是被你无视。
3. 更重要的,如果是http协议操作,为啥不使用现成的库?你自己实现的很麻烦而且漏洞百出。可以参考这个帖子:
http://www.cnblogs.com/highway-9/p/6021238.html[/quote]
谢谢您抽出时间来帮忙解决问题!
1. 这个我昨天意识到了,所以在recv()返回字节少于缓存长度的时候,我在有效信息最后一位加'\0' 解决,之前用memset(0)做过处理,但是不能解决中间正常字符流不能解码的问题;
2. 确实应该使用这个信息更好一些,我马上在程序里更改一下。
3. 因为我之前没有接触过网络编程,这个项目更多是个学习过程。并且现在这个是为了辅助自己的工作,不是商业项目,所以没有太考效率问题。等我把这个过程走下来,再回头用您推荐的库来优化一下。[/quote]
除了网页内容之外,http协议还会发送一些额外的信息,比如200 OK之类的http应答。你是用socket自己实现http的通讯过程。所以对于socket接收的数据,要按照http协议去解析。 当然2000,8000这些具体是什么,你已经把接收到的完整数据保存到文件里了,打开看看大概就知道是怎么回事了。[/quote]
老兄,能不能再帮我看一个问题^^
还是上面的代码,我建立一次连接,发送一个请求(keep-alive),会连续返回两个html信息,一个是我想要的网页源代码,最后还会返回一个很短的html,返回400,提示非法请求。 这是什么情况啊。
