用socket接收http的数据, 如何判断数据的结束
用同步socket(语言随意)来请求数据, 建立请求之后send HTTP Request头, 然后就可以recv服务器的Response了. 但是数据的结束应该怎样判断呢? (缓冲区大小是4096)
- 判断接收的数据与缓冲区大小对比, 如果小于说明数据已经结束: 如果最后一个包的大小恰好是4096, 这样我认为数据还没结束, 然后继续recv, 就会阻塞.
- 用非阻塞socket, 如果在接收过程中有空数据, 则说明数据已经结束: 数据中间可能会有延迟, 如果这时出现不连续, 会误认为数据已经结束.
- HTTP相应头的信息: 不是所有的响应都包含Content-Length
所以正确的http client实现这方面的是怎样的.
- - - - - - UPDATE@2015/3/14 - - - - - -
后来在StackOverflow找到了相应问题的回答, 在此贴下链接 http://stackoverflow.com/questions/4824451/detect-end-of-http-request-body.
同时也感谢 @xelz 的耐心回答, 采纳为答案.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没有Content-Length 只有两种情况,否则就不是一个标准的http server
可以仿造一下websocket的头。
每个数据包开头可以弄一个字节的fin来判断这个包是不是最后一个数据包。
如果是确认关闭连接,可不可以传一个累计发包数目供客户端对比一下还有没有没有成功接受的数据。