Android socket客户端怎么判断http响应数据的结束

版权声明:转载请标明原博客地址 https://blog.csdn.net/shuijianbaozi/article/details/84589893

最近用socket实现http post请求的时候,遇到一个问题,返回的数据是这样的

HTTP/1.1 200 
Content-Type: text/html;charset=UTF-8
Content-Length: 118
Date: Wed, 28 Nov 2018 09:46:16 GMT

{"ret":0,"data":[{"url":"http://XXXXX/file/c449d2e1793244c0a9e163bef9638cb7.mp3"}],"type":1}

解释:

1. {}存放返回的数据包体,{}显示为空;此时Content-Length: 2
2. 如何拿到数据包体呢?根据以下文章,可以根据下文中提到的\r\n\r\n,判断响应头结束,然后再拿到json数据

参考以下原博客地址

前言

    原文地址:https://blog.csdn.net/nimasike/article/details/81122784

http连接
  短连接
    定义:http头不包含Connection: Keep-Alive
    socket读取数据值返回-1者标记为结束

  长连接
    定义:http头包含Connection: Keep-Alive

http协议结构
  头
    头结束符定义:包含这"\r\n\r\n" 四个字节是指头结束
    如果头数据里包含Content-Length: x 就读取x字节数据,知道http响应数据的长度为x
    如果头数据里不包含Content-Length: x 类型为Transfer-Encoding: chunked 说明响应数据的长度不固定,结束符已"\r\n0\r\n"这5个字节为结束符

  body
    http协议数据响应的内容

 流程图

wireshark抓包解析

猜你喜欢

转载自blog.csdn.net/shuijianbaozi/article/details/84589893