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

學習設備開發(fā)之Hi3861-UDP-廣播

系統(tǒng) OpenHarmony
用戶數(shù)據(jù)報協(xié)議(UDP):UDP(用戶數(shù)據(jù)報協(xié)議)是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議。提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。UDP不提供可靠性,也不提供報文到達確認、排序以及流量控制等功能。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區(qū)??

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

一、前言

在net_demo.h文件里,testFun是什么?它是怎么選擇客戶端還是服務端再跳轉到tcp_client_test.c文件執(zhí)行TcpClientTest()函數(shù)的呢?

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)


搞不懂別人高深的代碼,于是后面就仿照官方代碼,自己寫了一份簡單的代碼,并且學習另一種傳輸協(xié)議UDP。

二、UDP簡介

1、定義

用戶數(shù)據(jù)報協(xié)議(UDP):UDP(用戶數(shù)據(jù)報協(xié)議)是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議。提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。UDP不提供可靠性,也不提供報文到達確認、排序以及流量控制等功能。它只是把應用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達目的地。因此報文可能會丟失、重復以及亂序等。但由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務器之間建立一個連接,且沒有超時重發(fā)等機制,故而傳輸速度很快。

2、復習一下TCP

“面向連接的TCP”就是在正式通信前必須要與對方建立起連接。TCP協(xié)議是一種可靠的、一對一的、面向有連接的通信協(xié)議。

3、UDP/TCP區(qū)別

TCP和UDP最大的區(qū)別就是:TCP是面向連接的,UDP是無連接的。TCP協(xié)議和UDP協(xié)議各有所長、各有所短,適用于不同要求的通信環(huán)境。TCP協(xié)議和UDP協(xié)議之間的差別如下表所示。

在實際的使用中,TCP主要應用于文件傳輸精確性相對要求較高且不是很緊急的情景,比如電子郵件、遠程登錄等。有時在這些應用場景下即使丟失一兩個字節(jié)也會造成不可挽回的錯誤,所以這些場景中一般都使用TCP傳輸協(xié)議。由于UDP可以提高傳輸效率,所以UDP被廣泛應用于數(shù)據(jù)量大且精確性要求不高的數(shù)據(jù)傳輸,比如我們平常在網站上觀看視頻或者聽音樂的時候應用的基本上都是UDP傳輸協(xié)議。

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)

開發(fā)流程圖:

UDP:

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)

TCP:

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)

三、代碼

1、把連接WiFi的代碼搬過來

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)


在net_params.h文件里配置WiFi:

#ifndef PARAM_HOTSPOT_SSID
#define PARAM_HOTSPOT_SSID "Fsr" // your AP SSID
#endif
#ifndef PARAM_HOTSPOT_PSK
#define PARAM_HOTSPOT_PSK "12345678" // your AP PSK
#endif

連接WiFi:

//連接wifi
WifiDeviceConfig config = {0};
// 準備AP的配置參數(shù)
strcpy(config.ssid, PARAM_HOTSPOT_SSID);
strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);
config.securityType = PARAM_HOTSPOT_TYPE;
osDelay(10);
//開始連接
int netId = ConnectToHotspot(&config);

記得在udp文件夾里的BUILD.gn編譯WiFi的.c文件:

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)

2、簡單的UDP

// 1.創(chuàng)建udp
int sock_fd;
int ret;
sock_fd = socket(AF_INET, SOCK_DGRAM, 0); //SOCK_DGRAM:UDP類型的socket
if (sock_fd < 0)
{
perror("sock_fd create error\r\n");
return;
}
// 2.配置地址
struct sockaddr_in send_addr;
socklen_t send_addr_len = sizeof(send_addr);
//內存初始化
memset((void *)&send_addr, 0, send_addr_len);
send_addr.sin_family = AF_INET;
send_addr.sin_addr.s_addr = inet_addr("192.168.11.41"); // 是將一個點分十進制的IP轉換成一個長整數(shù)型數(shù)(u_long類型)
send_addr.sin_port = htons(1234); // 端口號,從主機字節(jié)序轉為網絡字節(jié)序
// 3.配置發(fā)送消息
char *msg = "hello world";
while (1)
{
//4.發(fā)送
// UDP socket 是 “無連接的” ,因此每次發(fā)送都必須先指定目標主機和端口,主機可以是多播地址
ret = sendto(sock_fd, msg, strlen(msg), 0, (struct sockaddr *)&send_addr, send_addr_len);
printf("send UDP message {%s}done!\r\n", msg);
usleep(1 * 1000 * 1000);

// 5.接收
struct sockaddr_in fromAddr = {0};
socklen_t fromLen = sizeof(fromAddr);
// UDP socket 是 “無連接的” ,因此每次接收時前并不知道消息來自何處,通過 fromAddr 參數(shù)可以得到發(fā)送方的信息(主機、端口號)
ret = recvfrom(sock_fd, &response, sizeof(response), 0, (struct sockaddr *)&fromAddr, &fromLen);
if (ret <= 0)
{
printf("recvfrom failed or abort, %ld!\r\n", ret);
}
response[ret] = '\0';
printf("recv UDP message {%s} %ld done!\r\n", response, ret);
printf("peer info: ipaddr = %s, port = %d\r\n", inet_ntoa(fromAddr.sin_addr), ntohs(fromAddr.sin_port)); //將網絡地址轉換成“.”點隔的字符串格式。將一個16位數(shù)由網絡字節(jié)順序轉換為主機字節(jié)順序
}

代碼中主要的函數(shù)與TCP一樣都是用socket,已在??上文,【FFH】學習設備開發(fā)之Hi3861-TCPclient-開關燈??解釋。
兩者開發(fā)過程的區(qū)別:
 創(chuàng)建socket的類型type=SOCK_STREAM(TCP)/SOCK_DGRAM(UDP)。

int sockfd = socket(AF_INET, type, 0);

TCP需要多一步與主機連接,而UDP不需要。

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)

3、代碼運行結果

netcat,-u代表主機使用UDP協(xié)議傳輸,-l 開啟監(jiān)聽,-p指定端口。

#盲盒+碼#【FFH】學習設備開發(fā)之Hi3861-UDP-廣播-開源基礎軟件社區(qū)

四、UDP廣播

因為UDP是無連接的,并且一對多發(fā)送消息,自然而然就具有廣播消息的功能。
下面給出主要代碼:

// 1.創(chuàng)建udp
int sock_fd;
int ret;
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (sock_fd < 0)
{
perror("sock_fd create error\r\n");
return;
}
// 2.設置廣播模式
int yes = 1;
ret = setsockopt(sock_fd, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof(yes));
// SOL_SOCKET表示給當前的socketfd,賦予SO_BROADCAST廣播權限
if (ret == -1)
{
perror("setsockopt error\r\n");
return;
}
// 3.配置廣播地址
struct sockaddr_in broadcast_addr;
socklen_t broadcast_addr_len = sizeof(broadcast_addr);
//初始化地址內存
memset((void *)&broadcast_addr, 0, broadcast_addr_len);
broadcast_addr.sin_family = AF_INET;
broadcast_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST); //INADDR_BROADCAST:要發(fā)送給所有主機的地址
broadcast_addr.sin_port = htons(1234);
char *msg = "hello ";
while (1)
{
ret = sendto(sock_fd, msg, strlen(msg), 0, (struct sockaddr *)&broadcast_addr, broadcast_addr_len);

usleep(1 * 1000 * 1000);
}

設置廣播模式的函數(shù):

setsockopt(sock_fd, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof(yes));
int setsockopt( int socket, int level, int option_name,const void *option_value, size_t ,ption_len);

第一個參數(shù)socket是套接字描述符。
第二個參數(shù)level是被設置的選項的級別,如果想要在套接字級別上設置選項,就必須把level設置為 SOL_SOCKET。
第三個參數(shù)option_name指定準備設置的選項,option_name可以有哪些取值,這取決于level。當level取SOL_SOCKET時,option_name可取
SO_DEBUG,打開或關閉調試信息。
SO_REUSEADDR,打開或關閉地址復用功能。 當option_value不等于0時,打開,否則,關閉。
SO_DONTROUTE,打開或關閉路由查找功能。 當option_value不等于0時,打開,否則,關閉。
SO_BROADCAST,允許或禁止發(fā)送廣播數(shù)據(jù)。 當option_value不等于0時,允許,否則,禁止。
不需要確定發(fā)給哪個特定的主機,所以要設置廣播的地址為所有。

broadcast_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST); //INADDR_BROADCAST:要發(fā)送給所有主機的地址

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區(qū)??

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

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區(qū)
相關推薦

2022-11-24 14:44:33

傳輸控制協(xié)議設備開發(fā)

2023-05-26 16:07:14

Hi3861Wifi模塊

2021-12-31 15:07:00

鴻蒙HarmonyOS應用

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2022-03-15 15:00:59

Hi3861Pin接口鴻蒙

2021-09-09 10:06:09

鴻蒙HarmonyOS應用

2021-06-25 15:32:13

鴻蒙HarmonyOS應用

2023-04-24 15:11:51

系統(tǒng)開發(fā)鴻蒙

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-12-17 10:02:16

鴻蒙Hi3861開發(fā)板

2023-05-06 15:41:00

人體傳感器數(shù)據(jù)鴻蒙

2022-05-09 14:22:40

Hello WorlMNIST鴻蒙

2022-03-07 15:05:58

HTTPHi3861數(shù)據(jù)解析

2020-10-30 09:48:03

Hi3861開發(fā)板get請求

2021-12-20 21:01:52

鴻蒙HarmonyOS應用

2020-12-15 11:57:49

Hi3861 HarmonyOS開發(fā)板

2022-05-30 15:21:27

Hi3861TCP通信

2020-11-02 12:07:11

鴻蒙 GPIO

2020-10-27 10:08:19

Hi3861ADC驅動

2020-10-29 09:53:06

Hi3861硬件開發(fā)板
點贊
收藏

51CTO技術棧公眾號