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

发布于 2017-09-28 23:00:53 字数 141 浏览 1215 评论 2

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(2

灵芸 2017-10-15 13:28:08

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

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

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

甜柠檬 2017-10-15 06:47:36

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文