成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

一、前言

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

二、準(zhǔn)備工作

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

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

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

三、流程簡(jiǎn)介

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

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

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

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

(1) 什么是Socket

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

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

(2) TCP通信流程

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

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

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

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

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

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

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

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

第七步:read()和write()操作可以一直反復(fù)執(zhí)行,即互相不斷通信,當(dāng)通信完成時(shí),執(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 的地址類型,在通信中必須采用對(duì)應(yīng)的地址,如AF INET 決定了要用 ipv4 地址 。 (32位的》與端口號(hào)(16位的)的組合,AF UNIX 決定了要用一個(gè)絕對(duì)路徑名作為地址。
  • type:指定 Socket 類型。常用的 socket 類型有 SOCK STREAM、SOCK DGRAM、SOCK RAW 、SOCK PACKET、 SOCK SEQPACKET 等。流式 socket (SOCK STREAM)是一種面向連接的 Socket, 針對(duì)于面向連接的 TCP 。 服務(wù)應(yīng)用。數(shù)據(jù)報(bào)式 socket(SOCK DGRAM) 是一種無(wú)連接的 Socket,對(duì)應(yīng)于 無(wú)連接的 UDP 服務(wù)應(yīng)用。
  • protocol: 指定協(xié)議。常用協(xié)議有 IPPROTO TCP、IPPROTO UDP、IPPROTO STCP、IPPROTO TIPC 等,分別對(duì)應(yīng)TCP 傳輸協(xié)議,UDP 傳輸協(xié)議、STCP 傳輸協(xié)議、TIPC 傳輸協(xié)議。參數(shù)為o時(shí),會(huì)自動(dòng)選擇第二個(gè)參數(shù)類型對(duì)應(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:—個(gè)標(biāo)識(shí)己連接套接口的描述字。
  • address:是個(gè)sockaddr結(jié)構(gòu)指針,該結(jié)構(gòu)中包含了要結(jié)合的地址和端口號(hào)。
  • address_len:確定 address 緩沖區(qū)的長(zhǎng)度。

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

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

開(kāi)始監(jiān)聽(tīng)函數(shù)

int listen(int socketfd,int backlog)

參數(shù)介紹

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

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

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

參數(shù)介紹

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

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

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

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

五、連接函數(shù)

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

參數(shù)介紹

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

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

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

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ù)同樣有兩個(gè):

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)容,請(qǐng)?jiān)L問(wèn):??

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

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

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(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

2012-10-15 13:40:15

IBMdw

2014-01-15 10:06:30

vFlash

2010-08-06 15:35:06

Flex服務(wù)器

2024-02-22 13:47:40

2010-08-27 10:23:26

DHCP服務(wù)器

2009-06-10 16:25:02

2014-11-14 11:03:56

微軟.NET

2023-06-30 08:00:00

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

2021-09-02 10:49:25

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

2017-12-06 22:29:53

2015-11-04 14:14:56

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

2009-07-06 17:22:54

JSP服務(wù)器

2010-04-21 13:18:33

RAC負(fù)載均衡配置

2010-05-27 18:49:38

SVN入門

2009-02-16 16:30:23

OperaTurbo服務(wù)器

2021-07-27 06:14:32

服務(wù)器端移動(dòng)端性能測(cè)試

2010-10-15 08:57:15

PHP多進(jìn)程
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日本激情视频网 | 日韩国产中文字幕 | 中文字幕成人免费视频 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 成人天堂噜噜噜 | 99久久婷婷国产综合精品电影 | 一区二区三区四区不卡视频 | 国产一区二区三区免费观看在线 | 久久伊人亚洲 | 欧美成人一区二免费视频软件 | 亚洲综合天堂 | 午夜成人在线视频 | 成人欧美一区二区三区视频xxx | 国产精品视频久久久 | 国产真实精品久久二三区 | 久久久久久国产精品免费免费狐狸 | 九九热在线免费视频 | 亚洲一区二区在线视频 | 精品视频久久久久久 | 欧美一区二区三区在线 | 精品美女在线观看视频在线观看 | 91精品一区| 亚洲日本视频 | 国产欧美在线一区 | 欧美久久久久久 | 天天操天天天干 | 可以看黄的视频 | 欧美不卡在线 | 亚洲一二三区精品 | 国产高清久久久 | 日一日操一操 | 久久天天躁狠狠躁夜夜躁2014 | 国产1区在线 | 在线中文字幕日韩 | 日本一区二区不卡 | 亚洲国产精品一区二区三区 | 福利一区在线观看 | 亚洲第一天堂 | 色综合一区二区 | av在线免费看网址 | 欧美日一区 |