概述:
最近在做一個項目,需要用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