偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

OpenHarmony與蘋果的夢幻聯(lián)動——服務(wù)器端(上)

系統(tǒng) OpenHarmony
本篇文章將詳細(xì)介紹如何在小熊派搭建TCP服務(wù)器,處理來自各種客戶端的請求。本篇文章適合于小型系統(tǒng)和標(biāo)準(zhǔn)系統(tǒng),大家可以將本項(xiàng)目移植到符合以上條件的開發(fā)板上。配置好對應(yīng)的編譯規(guī)則即可。

??想了解更多內(nèi)容,請?jiān)L問:??

??51CTO OpenHarmony技術(shù)社區(qū)??

??https://ost.51cto.com??

一、前言

承接上篇文章的??項(xiàng)目介紹??,本篇文章將詳細(xì)介紹如何在小熊派搭建TCP服務(wù)器,處理來自各種客戶端的請求。本篇文章適合于小型系統(tǒng)和標(biāo)準(zhǔn)系統(tǒng),大家可以將本項(xiàng)目移植到符合以上條件的開發(fā)板上。配置好對應(yīng)的編譯規(guī)則即可。

二、準(zhǔn)備工作

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

2、已經(jīng)配置好小熊派開發(fā)環(huán)境的電腦一臺。

3、將小熊派接入到局域網(wǎng)。

三、流程簡介

編寫TCP服務(wù)器的C文件 --> 配置BUILD.gn --> 將我們的代碼添加編譯–>編譯燒錄。

四、網(wǎng)絡(luò)開發(fā)基礎(chǔ)知識

在OpenHarmony上進(jìn)行網(wǎng)絡(luò)開發(fā)與在Linux上進(jìn)行網(wǎng)絡(luò)開發(fā)十分相似,采用的是C語言的套接字(Socket)開發(fā)。

進(jìn)行網(wǎng)絡(luò)開發(fā)之前,如果沒有相關(guān)基礎(chǔ),建議先了解一下OSI網(wǎng)絡(luò)模型與TCP/IP協(xié)議的關(guān)系。本次用到的是用Socket進(jìn)行傳輸層的開發(fā),使用了到了一點(diǎn)點(diǎn)應(yīng)用層HTTP的協(xié)議。

(1) 什么是Socket

在計算機(jī)通信領(lǐng)域,socket 被翻譯為“套接字”,它是計算機(jī)之間進(jìn)行通信的一種約定或一種方式。通過 socket 這種約定,一臺計算機(jī)可以接收其他計算機(jī)的數(shù)據(jù),也可以向其他計算機(jī)發(fā)送數(shù)據(jù)。

總結(jié)為一句就是:socket就是整合好TCP/IP協(xié)議的一個工具。讓我們無需過度關(guān)注于底層協(xié)議的實(shí)現(xiàn),直接用封裝好的socket就行了。

(2) TCP通信流程

在開始使用socket之前,我們要知道TCP服務(wù)器端與TCP客戶端進(jìn)行通信的流程。

我們小熊派要實(shí)現(xiàn)的是圖中的9右半部分,即TCP服務(wù)器端。我們一步一步的看,每一步都有對應(yīng)的代碼來實(shí)現(xiàn)。

第一步:socket()函數(shù)用來創(chuàng)建socket套接字,可以理解為面對對象中的創(chuàng)建對象,但是不等同。

第二步:bind()函數(shù)用來綁定IP和端口,即選擇你的TCP服務(wù)器在哪個IP和端口提供服務(wù)。

第三步:listen()函數(shù)用來監(jiān)聽上一步中選擇的IP和端口。

第四步:accept()函數(shù)用來等待來自客戶端的連接,即進(jìn)入阻塞狀態(tài)。

第五步:read()函數(shù)會在有客戶請求時,讀取客戶端發(fā)送的請求數(shù)據(jù)。

第六步:write()函數(shù)可以給客戶端返回數(shù)據(jù),該操作可選,也可以不給客戶端返回任何數(shù)據(jù)。

第七步:read()和write()操作可以一直反復(fù)執(zhí)行,即互相不斷通信,當(dāng)通信完成時,執(zhí)行close函數(shù)關(guān)閉套接字。

(3) 相關(guān)函數(shù)講解

創(chuàng)建socket套接字

int socket(int domain,int type,int protocol);

參數(shù)介紹

  • domain:協(xié)議域,又稱協(xié)議族(family),常用的協(xié)議族有 AFL INET、AF INET6、AF LOCAL(或稱AF UNIX, Unix成socket) AF ROUTE 等。協(xié)議族決定了 socket 的地址類型,在通信中必須采用對應(yīng)的地址,如AF INET 決定了要用 ipv4 地址 。 (32位的》與端口號(16位的)的組合,AF UNIX 決定了要用一個絕對路徑名作為地址。
  • type:指定 Socket 類型。常用的 socket 類型有 SOCK STREAM、SOCK DGRAM、SOCK RAW 、SOCK PACKET、 SOCK SEQPACKET 等。流式 socket (SOCK STREAM)是一種面向連接的 Socket, 針對于面向連接的 TCP 。 服務(wù)應(yīng)用。數(shù)據(jù)報式 socket(SOCK DGRAM) 是一種無連接的 Socket,對應(yīng)于 無連接的 UDP 服務(wù)應(yīng)用。
  • protocol: 指定協(xié)議。常用協(xié)議有 IPPROTO TCP、IPPROTO UDP、IPPROTO STCP、IPPROTO TIPC 等,分別對應(yīng)TCP 傳輸協(xié)議,UDP 傳輸協(xié)議、STCP 傳輸協(xié)議、TIPC 傳輸協(xié)議。參數(shù)為o時,會自動選擇第二個參數(shù)類型對應(yīng)的默認(rèn)協(xié)議。

注意:type 和protocol 不可以隨意組合,如SOCK STREAM 不可以跟 1PPROTOUDP 組合。

返回值: 如果調(diào)用成功就返口新創(chuàng)建的套接字的描述符,如果大敗就返回INVALID SOCKET(Linux 下失敗返回-1)。

綁定端口函數(shù)

int bind(int socketfd,const struct sockaddr *addr,socklen_t addrlen)

參數(shù)介紹

  • socketfd:—個標(biāo)識己連接套接口的描述字。
  • address:是個sockaddr結(jié)構(gòu)指針,該結(jié)構(gòu)中包含了要結(jié)合的地址和端口號。
  • address_len:確定 address 緩沖區(qū)的長度。

注意:其中 sockaddr這個地址結(jié)構(gòu)根據(jù)地址創(chuàng)建 socket 時的地址協(xié)議族的不同而不同。

返回值:如果函數(shù)執(zhí)行成功,返回值為0,否則為SOCKET_ERROR。

開始監(jiān)聽函數(shù)

int listen(int socketfd,int backlog)

參數(shù)介紹

  • socketfd:要監(jiān)聽的socket描述字。
  • backlog:相應(yīng)socket可以排隊(duì)的最大連接個數(shù)。

等待連接阻塞函數(shù)

int accept(int socketfd,struct sockaddr *addr, socklen_t *addrlen);

參數(shù)介紹

  • socketfd:就是上面解釋中的監(jiān)聽套接字,這個套接字用來監(jiān)聽一個端口,當(dāng)有一個客戶與服務(wù)器連接時,它使用這個個端口號,而此時這個端口號正與這個套接字關(guān)聯(lián)。當(dāng)然客戶不知道套接字這些細(xì)節(jié),已只知道一個地址和一個端口號。
  • sockaddr:結(jié)果參數(shù),它用來接受一個返回值,這返回值指定客戶端的地址,當(dāng)然這個地址是通過某個地址結(jié)構(gòu)來描述的,用戶應(yīng)該知道這一個什么樣的地址結(jié)構(gòu)。如果對客戶的地址不感興趣,那么可以把這個值設(shè)置為NULL。
  • len:它也是結(jié)果的參數(shù),用來接受上述 addr 的結(jié)構(gòu)的大小的,已指明 addr 結(jié)構(gòu)所占有的宇節(jié)個數(shù)。同樣的,它也可以被設(shè)置為NULL。

注意:accept默認(rèn)會阻塞進(jìn)程,直到有一個客戶連接建立后返回,它返回的是一個新可用的套接字,這個套接字是連接套接字。

返回值:成功返回客戶端的文件貓述符,失敗返回-1。一如果accept成功返回,則服務(wù)器與容戶

己經(jīng)正確建立連接了,此時服務(wù)器通過accept返口的套接字來完成與客戶的通信。

五、連接函數(shù)

int connnect(int sockfd,const struct sockaddr *addr,socklen_t addrlen)

參數(shù)介紹

  • socketfd:客戶端socket的描述字。
  • socketaddr:服務(wù)器的socket地址。
  • addrlen:socket地址的長度

發(fā)送函數(shù)

發(fā)送函數(shù)有兩個:

ssize_t write(int sockfd,const void *buf,szie_t nbytes);

參數(shù)介紹

  • sockfd為要寫入文件的描述符。
  • buf為要寫入數(shù)據(jù)的緩沖區(qū)地址。
  • nbytes為要寫入的數(shù)據(jù)的字節(jié)書。

返回值:成功返回寫入的字節(jié)數(shù),失敗返回-1。

int send(int sockfd,const void *buf,int len,int flags)

參數(shù)介紹

  • sockfd為要寫入文件的描述符。
  • buf為要寫入數(shù)據(jù)的緩沖區(qū)地址。
  • len為要寫入的數(shù)據(jù)的字節(jié)書。
  • flags有以下選擇,MSG_ DONTROUTE 為不查找路由表;MSG_OOB為接受或發(fā)送帶外數(shù)據(jù) ;MSG PEEK為查看數(shù)據(jù),且不從系統(tǒng)緩沖區(qū)移走數(shù)據(jù);MSG WAITALL為等待任何數(shù)據(jù);0和write函數(shù)的操作一樣。

返回值:成功返回寫入的字節(jié)數(shù),失敗返回-1。

接受函數(shù)

接受函數(shù)同樣有兩個:

ssize_t read(int sockfd,const void *buf,szie_t nbytes);

參數(shù)介紹

  • sockfd為要讀取文件的描述符。
  • buf為要讀取數(shù)據(jù)的緩沖區(qū)地址。
  • nbytes為要讀取的數(shù)據(jù)的字節(jié)書。

返回值:成功返回讀取到的字節(jié)數(shù),失敗返回-1。

int recv(int sockfd,const void *buf,int len,int flags)

參數(shù)介紹

  • sockfd為要寫入文件的描述符。
  • buf為要寫入數(shù)據(jù)的緩沖區(qū)地址。
  • len為要寫入的數(shù)據(jù)的字節(jié)書。
  • flags有以下選擇,MSG_ DONTROUTE 為不查找路由表;MSG_OOB為接受或發(fā)送帶外數(shù)據(jù) ;MSG PEEK為查看數(shù)據(jù),且不從系統(tǒng)緩沖區(qū)移走數(shù)據(jù);MSG WAITALL為等待任何數(shù)據(jù);0和write函數(shù)的操作一樣。

返回值:成功返回寫入的字節(jié)數(shù),失敗返回-1。

??想了解更多內(nèi)容,請?jiān)L問:??

??51CTO OpenHarmony技術(shù)社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-05-07 15:54:56

小熊派鴻蒙

2011-06-07 16:01:46

Android 服務(wù)器 數(shù)據(jù)交互

2013-12-25 11:01:16

JavaScript

2014-01-15 10:06:30

vFlash

2012-10-15 13:40:15

IBMdw

2024-02-22 13:47:40

2010-08-06 15:35:06

Flex服務(wù)器

2009-06-10 16:25:02

2010-08-27 10:23:26

DHCP服務(wù)器

2021-09-02 10:49:25

Node.jsPHP服務(wù)器開發(fā)

2017-12-06 22:29:53

2015-11-04 14:14:56

HTTP網(wǎng)絡(luò)協(xié)議

2014-11-14 11:03:56

微軟.NET

2023-06-30 08:00:00

漏洞網(wǎng)絡(luò)安全SSTI

2009-07-06 17:22:54

JSP服務(wù)器

2021-07-27 06:14:32

服務(wù)器端移動端性能測試

2010-10-15 08:57:15

PHP多進(jìn)程

2012-05-21 10:52:43

2009-07-27 12:56:27

控件CheckBoxLASP.NET服務(wù)器

2009-10-20 17:28:02

VB.NET服務(wù)器端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號