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

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

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

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

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

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

一、前言

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

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


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

二、UDP簡介

1、定義

用戶數(shù)據(jù)報協(xié)議(UDP):UDP(用戶數(shù)據(jù)報協(xié)議)是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議。提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。UDP不提供可靠性,也不提供報文到達確認、排序以及流量控制等功能。它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達目的地。因此報文可能會丟失、重復以及亂序等。但由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(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主要應(yīng)用于文件傳輸精確性相對要求較高且不是很緊急的情景,比如電子郵件、遠程登錄等。有時在這些應(yīng)用場景下即使丟失一兩個字節(jié)也會造成不可挽回的錯誤,所以這些場景中一般都使用TCP傳輸協(xié)議。由于UDP可以提高傳輸效率,所以UDP被廣泛應(yīng)用于數(shù)據(jù)量大且精確性要求不高的數(shù)據(jù)傳輸,比如我們平常在網(wǎng)站上觀看視頻或者聽音樂的時候應(yīng)用的基本上都是UDP傳輸協(xié)議。

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

開發(fā)流程圖:

UDP:

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

TCP:

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

三、代碼

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

#盲盒+碼#【FFH】學習設(shè)備開發(fā)之Hi3861-UDP-廣播-開源基礎(chǔ)軟件社區(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】學習設(shè)備開發(fā)之Hi3861-UDP-廣播-開源基礎(chǔ)軟件社區(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);
//內(nèi)存初始化
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轉(zhuǎn)換成一個長整數(shù)型數(shù)(u_long類型)
send_addr.sin_port = htons(1234); // 端口號,從主機字節(jié)序轉(zhuǎn)為網(wǎng)絡(luò)字節(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)); //將網(wǎng)絡(luò)地址轉(zhuǎn)換成“.”點隔的字符串格式。將一個16位數(shù)由網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換為主機字節(jié)順序
}

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

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

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

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

3、代碼運行結(jié)果

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

#盲盒+碼#【FFH】學習設(shè)備開發(fā)之Hi3861-UDP-廣播-開源基礎(chǔ)軟件社區(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.設(shè)置廣播模式
int yes = 1;
ret = setsockopt(sock_fd, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof(yes));
// SOL_SOCKET表示給當前的socketfd,賦予SO_BROADCAST廣播權(quán)限
if (ret == -1)
{
perror("setsockopt error\r\n");
return;
}
// 3.配置廣播地址
struct sockaddr_in broadcast_addr;
socklen_t broadcast_addr_len = sizeof(broadcast_addr);
//初始化地址內(nèi)存
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è)置廣播模式的函數(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是被設(shè)置的選項的級別,如果想要在套接字級別上設(shè)置選項,就必須把level設(shè)置為 SOL_SOCKET。
第三個參數(shù)option_name指定準備設(shè)置的選項,option_name可以有哪些取值,這取決于level。當level取SOL_SOCKET時,option_name可取
SO_DEBUG,打開或關(guān)閉調(diào)試信息。
SO_REUSEADDR,打開或關(guān)閉地址復用功能。 當option_value不等于0時,打開,否則,關(guān)閉。
SO_DONTROUTE,打開或關(guān)閉路由查找功能。 當option_value不等于0時,打開,否則,關(guān)閉。
SO_BROADCAST,允許或禁止發(fā)送廣播數(shù)據(jù)。 當option_value不等于0時,允許,否則,禁止。
不需要確定發(fā)給哪個特定的主機,所以要設(shè)置廣播的地址為所有。

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

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

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

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

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

2022-11-24 14:44:33

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

2023-05-26 16:07:14

Hi3861Wifi模塊

2021-12-31 15:07:00

鴻蒙HarmonyOS應(yīng)用

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2022-03-15 15:00:59

Hi3861Pin接口鴻蒙

2021-09-09 10:06:09

鴻蒙HarmonyOS應(yīng)用

2021-06-25 15:32:13

鴻蒙HarmonyOS應(yīng)用

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應(yīng)用

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驅(qū)動

2020-10-29 09:53:06

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

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

主站蜘蛛池模板: 免费成人在线网 | 日韩精品视频一区二区三区 | 97人人澡人人爽91综合色 | 天天久久| 91视频.com| 亚洲欧美日韩久久久 | 午夜免费网 | 免费在线观看黄色av | 在线中文字幕亚洲 | 密室大逃脱第六季大神版在线观看 | 精品国产乱码久久久久久牛牛 | av三级在线观看 | 九九综合九九 | 欧美久久不卡 | 综合久 | 天堂网中文字幕在线观看 | 美国一级黄色片 | 激情婷婷成人 | 久久久不卡网国产精品一区 | 国产在线a | 欧美在线国产精品 | 久久久久久网站 | 欧美成人精品一区二区男人看 | 91精品国产乱码久久久久久久 | 97久久久| 久久久久久久久久久福利观看 | 爱爱综合网 | 国产一区免费视频 | 久久夜视频 | 涩涩视频在线观看免费 | 成人免费视频 | 色播99| 欧美亚洲视频 | 日韩欧美网 | 国产免费观看一级国产 | 日韩久草| 国产人久久人人人人爽 | 午夜免费精品视频 | 在线播放国产一区二区三区 | 91社区在线观看高清 | 久久蜜桃av一区二区天堂 |