概述:
最近在做一个项目,需要用stm32f103zet6开发板走HTTP协议,向疲劳驾驶检测设备发送请求消息,使其下发人脸识别的图片或参数信息,开发板进行接收,要求如下:
1. 开发板作为客户端、疲劳驾驶检测是被作为服务器端
2. 标准HTTP协议
3. 请求方法使用POST请求方式,上传或下发的数据放在消息主体中(entity-body)
4. 所有字符串需进行UTF-8转码
5. 双方交换的数据统一打包为JSON格式
思路:
1. 封装HTTP请求数据包
(1)弄清楚请求消息的具体格式
(2)按照cJSON的使用方法用cJSON库中的接口函数将HTTP请求消息的数据封装为JSON包
2. 按照TCP-Client的流程进行TCP连接
3. 客户端向服务器端发送HTTP请求信息
将封装的JSON数据包放在TCP发送函数中,发送给服务器
4. 服务器端接收到请求后向客户端发送响应信息
用TCP接收函数接收消息,接收到的消息应该是UTF-8编码的,JSON包数据
5. 对JSON包数据进行解析
6. 服务器关闭TCP连接
一般情况下,一旦服务器向浏览器发送完数据后它就要关闭TCP连接,除非客户端或服务器发送信息的时候加上了以下代码:
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态
问题:
1. HTTP请求消息的格式是什么???如下图(1)是标准请求消息格式,请具体举例,比如 获取人脸图片的请求消息格式是什么???在产品手册中说明如图(2)
(1)
(2)
2. 知道了具体的请求消息格式后,
(1)是否先需要造一个请求消息的字符串数组,然后再将该字符串数组进行UTF-8编码???,然后再将该UTF-8编码后的数据进行JSON封装???
(2)或是直接使用cJSON数据库按照请求消息格式封装一个请求消息的JSON包,然后再将该JSON包进行UTF-8转码???
3. 针对第2个问题中的(1)(2)两点:
(1)UTF-8编码后的数据进行JSON封装后,是否还需要转化成普通的字符串数据后,再通过TCP发送函数发送给服务器???
(2)先JSON封转再进行UTF-8转码后,是直接通过TCP发送函数发送,还是需要再转化成普通字符串数据后再通过tcp发送函数发送给服务器???
4. 服务器响应客户端后,是否直接关闭TCP连接,还是在客户端发送请求消息的时候添加以下代码保持TCP连接???
Connection:keep-alive