http协议-关于http长连接的问题
使用socket模拟浏览器请求网页的时候, 如果指定Connection: Keep-Alive的时候,表示想与网站长连接, 因为是长连接, 我不能这样: 循环读取数据,当返回长度为0时,判断本次接收完成
那么如果是长连接,如何判断我请求的一次数据已经完成?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
个人感觉可以从传输的协议内下手
比如,用特定的 0x55 0x56 作为本次传输的数据结束,用 0x55 0x55 作为开始
中间的内容作为数据,如果分块传输的话,
用 0x55 0x00 + 块数 + 0x00 + 数据 的方式来传输
更新:
页面的话,可以直接根据标签的截至来判断是否完结,当然,这种方法并不是很靠谱
推荐在建立连接之后,获取一下内容的长度(content-length),在 http 响应头的说~
比如:
HttpUrlConnection connection = (HttpURLConnection) url.openConnection();
int length = connection.getContentLength();
响应头content-length表明实体长度,可依据它
不过注意有一种chunk模式,即Transfer-Encoding:chunk的话,需用chunk模式解码,chunk模式有明确的结束标志