天天看點

【FFH】OpenHarmony與蘋果的夢幻關聯——伺服器端(下)

一、前言

上一篇文章進行了C語言API的講解,本篇文章将在小熊派上進行實操。

二、準備工作

1、小熊派-鴻蒙·叔(BearPi-HM Micro)一台

2、已經配置好小熊派開發環境的電腦一台

3、将小熊派接入到區域網路

三、流程簡介

配置wifi連接配接的配置文本-->編寫TCP伺服器的C檔案 --> 配置BUILD.gn --> 将我們的代碼添加編譯-->編譯燒錄

四、WIFI配置

打開applications/BearPi/BearPi-HM_Micro/samples/communication/wpa_supplicant/config/wpa_supplicant.conf配置檔案,修改ssid和psk為你自己家路由器或者手機熱點的名字和密碼。

【FFH】OpenHarmony與蘋果的夢幻關聯——伺服器端(下)

五、業務代碼編寫

我們在工程目錄下/applications/BearPi/BearPi-HM_Micro/samples裡面存放我們的代碼。

目錄結構如下

├─ tcp_http  		#源碼目錄
     ├── BUILD.gn	#編輯配置檔案
     └── tcp_http.c	#網絡通信源碼

           

5.1 編寫TCP伺服器源碼

本部分是整個TCP伺服器實作的核心,打開我們建立的tcp_http.c檔案,添加以下代碼。為了友善測試代碼的有效性,我們先拿TCP伺服器做一個簡單的網站,用到了一點點簡單的HTTP協定。

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>

int main()
{
	//1建立socket
	int socket_server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	int opt = 1;
	setsockopt(socket_server,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof( opt ));//該函數解決端口占用問題
	//2.綁定端口
	struct sockaddr_in server_addr;
	memset(&server_addr,0,sizeof(struct sockaddr_in));//把結構體裡面的資料清零
	server_addr.sin_port = htons(80);
	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//任意ip都能通路此服務
	server_addr.sin_family = AF_INET;
	bind(socket_server,(struct sockaddr*)&server_addr,sizeof(server_addr));
	//3.監聽端口
	listen(socket_server,5);//5表示最大連接配接數
	while(1){
		//4.進入阻塞狀态
		struct sockaddr_in client_addr;
		int client_lenght = sizeof(client_addr);
		int client_id = accept(socket_server,(struct sockaddr*)&client_addr,&client_lenght);
		//5.讀取用戶端發來的消息
		char buffer[1024];
		recv(client_id,buffer,sizeof(buffer),0);
		printf("%s",buffer);
		//5.根據HTTP協定的格式,回報一個網頁給用戶端
		const char buf[]="HTTP/1.1 200 OK\r\nDate: Fri, 22 May 2009 06:07:21 GMT\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<html><head></head><body><p>Hello Openharmony!</p></body></html>"; 
		send(client_id,buf,sizeof(buf),0);
		//6.關閉套接字
		close(client_id);
	}
	return 0;
}
           

5.2 配置BUILD.gn檔案

import("//build/lite/config/component/lite_component.gni")
executable("tcp_http") {
    sources = [
        "tcp_http.c",
    ]
    include_dirs = [
    ]
}

lite_component("net_app") {
    features = [
        ":tcp_http",
    ]
}

           

5.3 配置編譯元件

我們要将我們的代碼加入到my_sample元件中,打開build/lite/components/applications.json

【FFH】OpenHarmony與蘋果的夢幻關聯——伺服器端(下)

添加圖中的兩條路徑

六、編譯燒錄

6.1 編譯

# 進入下載下傳路徑
cd ~/bearpi-hm_micro_small
# 開始編譯
hb set
# 輸入目前路徑
.
# 回車選擇“bearpi-hm_micro”
# 編譯
hb build -t notest --tee -f
# 等待直到螢幕出現:build success字樣,說明編譯成功。

           

6.2 燒錄

先複制出來編譯好的鏡像

cp out/bearpi_hm_micro/bearpi_hm_micro/OHOS_Image.stm32 applications/BearPi/BearPi-HM_Micro/tools/download_img/kernel/
cp out/bearpi_hm_micro/bearpi_hm_micro/rootfs_vfat.img applications/BearPi/BearPi-HM_Micro/tools/download_img/kernel/
cp out/bearpi_hm_micro/bearpi_hm_micro/userfs_vfat.img applications/BearPi/BearPi-HM_Micro/tools/download_img/kernel/

           

再使用STM32CubeProgrammer燒錄鏡像,純Linux開發環境參考我之前的教程,Windows混合開發環境請參考官方教程。

七、測試

燒錄成功後,切換撥碼,進入到系統。

序列槽連接配接小熊派的ohos終端,首先要進行wifi配置,在終端輸入以下指令配置wifi

./bin/wpa_supplicant -i wlan0 -d -c /etc/wpa_supplicant.conf
           

輸入此指令後大概等3分鐘,等待小熊派連接配接上wifi,

通過以下指令檢視是否配置設定到ip可以知道小熊派是否已經連接配接上了wifi

ifconfig
           
【FFH】OpenHarmony與蘋果的夢幻關聯——伺服器端(下)

如果有了IP表示已經連接配接上了wifi,我們接着運作我們寫tcp伺服器。

cd bin/		#先進入到bin目錄中	
./tcp_http	#運作我們的程式
           

接着我們可以在我們同在一個區域網路的電腦上,打開浏覽器,輸入小熊派的ip通路伺服器。

【FFH】OpenHarmony與蘋果的夢幻關聯——伺服器端(下)

浏覽器能夠成功顯示“Hello Openharmony”,表示已經成功搭建好了TCP伺服器。

八、尾言

大家可能關心一開始的與蘋果siri關聯的怎麼實作,考慮大多數小夥伴的複現,先做了一個簡單的http伺服器,大家可以直接在浏覽器上通路即可以調試。下篇文章會給大家最終實作的代碼。希望大家能用網絡通信,開發更多有意思的項目。

繼續閱讀