为了账号安全,请及时绑定邮箱和手机立即绑定

用socket接收http的数据, 如何判断数据的结束

用socket接收http的数据, 如何判断数据的结束

牛魔王的故事 2019-04-19 16:10:54
用同步socket(语言随意)来请求数据,建立请求之后sendHTTPRequest头,然后就可以recv服务器的Response了.但是数据的结束应该怎样判断呢?(缓冲区大小是4096)判断接收的数据与缓冲区大小对比,如果小于说明数据已经结束:如果最后一个包的大小恰好是4096,这样我认为数据还没结束,然后继续recv,就会阻塞.用非阻塞socket,如果在接收过程中有空数据,则说明数据已经结束:数据中间可能会有延迟,如果这时出现不连续,会误认为数据已经结束.HTTP相应头的信息:不是所有的响应都包含Content-Length所以正确的httpclient实现这方面的是怎样的.------UPDATE@2015/3/14------后来在StackOverflow找到了相应问题的回答,在此贴下链接http://stackoverflow.com/questions/4824451/detect-end-of-http-request-body.同时也感谢@xelz的耐心回答,采纳为答案.
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

没有Content-Length只有两种情况,否则就不是一个标准的httpserver
传输完毕就关闭connection
HTTP1.1没有Content-Length,但是Transfer-Encoding:chunked,最后一个chunk的length==0
                            
查看完整回答
反对 回复 2019-04-19
?
慕村9548890

TA贡献1884条经验 获得超4个赞

可以仿造一下websocket的头。
每个数据包开头可以弄一个字节的fin来判断这个包是不是最后一个数据包。
如果是确认关闭连接,可不可以传一个累计发包数目供客户端对比一下还有没有没有成功接受的数据。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 292 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信