http协议-关于http长连接的问题

http协议-关于http长连接的问题

想挽留 发布于 2017-09-28 字数 227 浏览 1134 回复 2

使用socket模拟浏览器请求网页的时候, 如果指定Connection: Keep-Alive的时候,表示想与网站长连接, 因为是长连接, 我不能这样: 循环读取数据,当返回长度为0时,判断本次接收完成
那么如果是长连接,如何判断我请求的一次数据已经完成?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灵芸 2017-10-15 2 楼

个人感觉可以从传输的协议内下手
比如,用特定的 0x55 0x56 作为本次传输的数据结束,用 0x55 0x55 作为开始
中间的内容作为数据,如果分块传输的话,
用 0x55 0x00 + 块数 + 0x00 + 数据 的方式来传输

更新:
页面的话,可以直接根据标签的截至来判断是否完结,当然,这种方法并不是很靠谱
推荐在建立连接之后,获取一下内容的长度(content-length),在 http 响应头的说~
比如:

HttpUrlConnection connection = (HttpURLConnection) url.openConnection();
int length = connection.getContentLength();

甜柠檬 2017-10-15 1 楼

响应头content-length表明实体长度,可依据它
不过注意有一种chunk模式,即Transfer-Encoding:chunk的话,需用chunk模式解码,chunk模式有明确的结束标志