Linux驅動06 --- UDP

目錄

?一、UDP

1.1 介紹

1.2 UDP 的通信方式

1.3 單播

????????發送函數????????

????????接收函數

1.4 廣播

1.5 組播/多播


一、UDP

1.1 介紹

????????傳輸層的另外一個協議

????????????????面向無連接,不穩定,速度快,可以一對多

????????????????UDP(User Datagram Protocol,用戶數據報協議)是在一組互連的計算機網絡環境中提供分組交換計算機通信的數據報模式。該協議假定使用 IP 作為底層協議,按照OSI 模型工作在傳輸層。UDP 為應用程序提供了一種以最少的協議機制向其他程序發送消息的過程。該協議是面向事務的,不保證傳遞和重復保護。需要有序、可靠地傳輸數據流的應用程序應使用傳輸控制協議 (TCP)。

1.2 UDP 的通信方式

????????UDP 通信分為發送方和接收方

????????發送方和接收方的通信全靠 IP 和端口

????????而 TCP 靠對方的通信套接字

????????發送方:

????????????????創建套接字 --- socket

????????????????直接發送消息 --- sendto

????????接收方:

????????????????創建套接字 --- socket

????????????????綁定自身的 IP 和端口 --- bind

????????????????接收消息 --- recvfrom

1.3 單播

????????一對一通信

????????發送函數????????

????????函數原型

????????????????ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen)

????????函數參數

????????????????sockfd:通信套接字

????????????????buf:發送消息存放的空間首地址

????????????????len:消息的長度

????????????????flags:填 0 表示阻塞發送

????????????????dest_addr:struct sockaddr_in

????????????????addrlen:struct sockaddr_in 結構體大小

????????函數返回值

????????????????成功返回發送消息的長度,一個大于 0 的值,失敗返回負數

????????接收函數

????????函數原型

????????????????ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)

????????函數參數

????????????????sockfd:通信套接字

????????????????buf:接收數據存放空間的首地址

????????????????len:接收數據的長度

????????????????flags:填 0 表示阻塞接收

????????????????src_addr:發送方 IP 和端口信息存放空間的首地址,需要去定義一個變量去承接發送方的 IP 和端口信息

????????????????addrlen:發送方核心結構體的大小,需要定義一個變量,變量取地址裝進來

????????函數返回值

????????????????成功返回接收到消息的長度,失敗返回負數

1.4 廣播

????????一對多,一個發送,剩下的接收

????????相較于單播

????????????????1、多了一個套接字屬性設置 setsockopt --- 讓套接字可以發送廣播消息

????????????????2、發送方多了廣播 IP --- 當前的 IP,前 3 個字節不變,最后一個字節為 255

????????????????????????例如:廣播 IP --- 192.168.0.255

????????????????3、接收方多了一個新的定義 --- INADDR_ANY --- 0.0.0.0

1.5 組播/多播

????????相較于單播和廣播,更改的內容最多

????????組播需要創建和加入

????????發送方:

????????????????1、創建通信套接字

????????????????????????組播的 IP 地址 --- 224.0.0.x ,?x 最好不要用 1,1 比較特殊

????????????????2、創建組播 --- setsockopt

????????????????????????需要使用組播的結構體 struct iq_mreqn --- vscode 無法跳轉這個結構體

struct ip_mreqn 
{/* 多播組 IP 地址,大整數,可以用inet_pton(3) 將點分式轉換為大整數 */    struct in_addr imr_multiaddr; {in_addr_t s_addr;};/* 本機 IP 地址,可以用 0.0.0.0 代替,大整數,可以用 inet_pton(3) 將點分式轉換為大整數,INADDR_ANY */ struct in_addr imr_address; /* 當前使用的網絡設備的索引號,ip ad sh 命令可以,查看編號,用 if_nametoindex(3) 函數也可以通過網絡設備名字獲取編號,名字就是 ifconfig(1) 看到的名字,如 eth0、wlan0 等 */int imr_ifindex;
}; 

????????頭文件

????????????????#include <net/if.h>

????????函數原型

????????????????unsigned int if_nametoindex(const char *ifname)

????????函數參數

???????網卡的名字

????????????????setsockopt 中還需要幾個參數

????????????????????????IPPROTO_IP:組播的標志 --- 第二個參數

????????????????????????IP_MULTICAST_IF:發送方創建組播 --- 第三個參數

????????????????????????IP_ADD_MEMBERSHIP:接收方加入組播

????????????????????????UDP 作為一個了解 --- 要會寫單播,廣播,組播

????????在嵌入式的應用中,我們會使用到 UDP 的應用層協議,純粹的 UDP 用的相對較少,因為 UDP 的思想可以通過其它的傳感器實現,lora、zigbee

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914440.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914440.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914440.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AJAX 投票:技術解析與應用場景

AJAX 投票:技術解析與應用場景 引言 隨著互聯網技術的不斷發展,Web應用的用戶體驗越來越受到重視。AJAX(Asynchronous JavaScript and XML)作為一種重要的技術,在實現異步數據交互方面發揮著關鍵作用。本文將深入探討AJAX投票系統的技術原理、應用場景以及優化策略。 A…

【字節跳動】數據挖掘面試題0017:推薦算法:雙塔模型,怎么把內容精準地推送給用戶

文章大綱 雙塔模型:推薦算法中的“高效匹配引擎一、雙塔模型的核心思想:“分而治之” 的匹配邏輯二、雙塔模型的結構:從特征輸入到相似度輸出1. 輸入層:特征的 “原材料處理”2. 塔網絡層:用戶與物品的“個性化編碼”3. 交互層:向量相似度的“偏好打分”三、雙塔模型的優…

7月14日日記

數學類今天考完最后一科英語放假回家了。有點羨慕他們。今天英語成績出來了&#xff0c;我是89分&#xff0c;一開始有點失望&#xff0c;感覺沒有上90&#xff0c;這是一個很好的沖擊4.0 的機會。但是后來一想好像也沒什么可惜的&#xff0c;這個分數還是很高的。舍友小林是90…

js的局部變量和全局變量

全局變量常常定義在函數外&#xff0c;具有全局定義域&#xff0c;在整個js代碼的任何地方都可以使用&#xff0c;這個就叫全局變量局部變量定義在函數內部&#xff0c;只在當前函數的定義域可以被使用&#xff0c;而且不同的函數可以定義相同的局部變量&#xff0c;他們之間相…

C++ 多態詳解:從概念到實現原理----《Hello C++ Wrold!》(14)--(C/C++)

文章目錄前言多態的概念多態的定義和實現虛函數虛函數的重寫(覆蓋)多態的構成條件override 和 final&#xff08;C11提出&#xff09;finaloverride重載、覆蓋(重寫)、隱藏(重定義)的對比抽象類接口繼承和實現繼承多態的原理虛函數表(也叫做虛表)引申:虛表的打印多態的原理靜態…

Node.js + Express的數據庫AB View切換方案設計

方案總覽數據導入過程&#xff1a; - 根據控制表判斷當前活躍組&#xff08;假設當前活躍的是a&#xff0c;那么接下來要導入到b&#xff09;。 - 清空非活躍表&#xff08;即b表&#xff09;的數據&#xff0c;然后將新數據導入到b表。 - 切換控制表&#xff0c;將活…

C++_編程提升_temaplate模板_案例

類模板案例案例描述: 實現一個通用的數組類&#xff0c;要求如下&#xff1a;可以對內置數據類型以及自定義數據類型的數據進行存儲將數組中的數據存儲到堆區構造函數中可以傳入數組的容量提供對應的拷貝構造函數以及operator防止淺拷貝問題提供尾插法和尾刪法對數組中的數據進…

Win11系統安裝Anaconda環境極簡教程

Win11系統安裝Anaconda環境極簡教程 &#x1f4e5; 第一步&#xff1a;下載 Anaconda 安裝包 打開瀏覽器&#xff0c;訪問 Anaconda 官網&#xff0c;選擇View All Installers 選擇所需版本&#xff08;此文以2024.02-1為例&#xff09;&#xff0c;點擊進行下載&#xff08;…

Datawhale AI夏令營-基于帶貨視頻評論的用戶洞察挑戰賽

一.賽事目標基于星火大模型Spark 4.0 Ultra&#xff0c;對視頻和評論的數據進行商品識別&#xff0c;情感分析&#xff0c;歸類分析&#xff0c;最終為帶貨效果進行評價。并通過優化模型來提高評價準確度二.賽事環境1.基礎平臺&#xff1a;星火大模型Spark 4.0 Ultra2.賽事數據…

如何基于FFMPEG 實現視頻推拉流

文章目錄 前言環境準備為什么選擇 FFmpeg什么是nginx 1.7.11.3 GryphonNginx的conf配置啟動nginx推流命令接收視頻流Untiy播放視頻流最后前言 我們經常會有在電腦上實現推拉流的需求,Unity 和Unreal 都提供了基于WebRTC 的視頻流方案,效果還不錯,但是當我們需要推拉整個電腦…

飛算JavaAI:從情緒價值到代碼革命,智能合并項目與定制化開發新范式

目錄一、飛算 JavaAI 是什么&#xff1f;二、飛算JavaAI&#xff1a;安裝登錄2.1 IDEA插件市場安裝&#xff08;推薦&#xff09;2.2 離線安裝包三、飛算JavaAI核心功能&#xff1a;一鍵生成完整工程代碼功能背景3.1 理解需求3.2 設計接口3.3 表結構自動設計3.4 處理邏輯&#…

Python 基礎語法與數據類型(十一) - 類 (class) 與對象 (實例)

文章目錄1. 什么是類 (Class)&#xff1f;1.1 定義一個類2. 什么是對象 (Object) 或實例 (Instance)&#xff1f;2.1 創建對象&#xff08;實例化&#xff09;3. 訪問屬性和調用方法4. 類屬性 vs 實例屬性5. self 的重要性總結練習題練習題答案前幾篇文章我們學習了變量、數據類…

精準數據檢索+數據飛輪自驅優化,彩訊AI知識庫助力企業知識賦能和效率創新

近兩年&#xff0c;人工智能技術的精細化發展&#xff0c;讓知識庫概念重新成為“熱門詞匯”&#xff0c;騰訊ima等智能工作臺產品為個人用戶打造專屬知識庫&#xff0c;而面向B端市場&#xff0c;企業AI知識庫也逐步成為企業集中存儲與管理核心文檔、數據、經驗和流程的知識中…

打破空間邊界!Nas-Cab用模塊化設計重構個人存儲邏輯

文章目錄前言1. Windows安裝Nas-Cab2. 本地局域網連接Nas-Cab3. 安裝Cpolar內網穿透4. 固定Nas-Cab 公網地址"數據管理不該受制于硬件形態或地理邊界。這個開源方案證明&#xff1a;當功能模塊化且可擴展時&#xff0c;私有云可以像水一樣滲透進所有設備——現在就去Git倉…

Sigma-Aldrich細胞培養基礎知識:細胞培養的安全注意事項

細胞培養實驗室風險評估風險評估的主要目的是防止人員受傷&#xff0c;保護財產&#xff0c;并避免對個人和環境的傷害。在許多國家&#xff0c;法律要求進行風險評估。例如&#xff0c;英國的《英國職業健康與安全法案&#xff08;1974年&#xff09;》就是一個例子。歐洲共同…

Imx6ull用網線與電腦連接

理解工作方式沒有路由器時&#xff0c;可以使用&#xff0c;只要保持虛擬機的兩個網卡一個與電腦在同一網,一個與板子在同一網段(保持通信)就可以從虛擬機往板子下載第一步&#xff1a;查看電腦連接的網絡這一步是在找到主機ip地址這兩步在其他同類教程里一樣的第二步:設置以太…

力扣454.四數相加Ⅱ

給你四個整數數組 nums1、nums2、nums3 和 nums4 &#xff0c;數組長度都是 n &#xff0c;請你計算有多少個元組 (i, j, k, l) 能滿足&#xff1a;0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0示例 1&#xff1a;輸入&#xff1a;nums1 [1,2], nums2 …

Joplin:一款免費開源、功能強大且注重隱私的筆記軟件

Joplin 是一款免費開源、功能強大且注重隱私的筆記和待辦事項應用程序&#xff0c;它的設計目標是成為 Evernote 等流行筆記應用的強大替代品&#xff0c;尤其適合重視數據所有權和隱私的用戶。 功能特性 Joplin 的核心定位與優勢如下&#xff1a; 完全開源&#xff1a;代碼公…

滲透前四天總結

目錄 一.DNS DNS 基本概述 DNS解析過程 二.HTTPS TLS握手過程 RSA加密 對稱加密&#xff1a; 非對稱加密&#xff1a; RSA加密過程 三.使用xdebug調試php 四.信息收集 一.DNS DNS 基本概述 DNS&#xff1a;域名系統(DomainNameSystem)因特網的一項核心服務&#xf…

Python----NLP自然語言處理(中文分詞器--jieba分詞器)

一、介紹文本語料在輸送給NLP模型前&#xff0c;需要一系列的預處理工作&#xff0c;才能符合模型輸入的要求。對于NLP來說&#xff0c;他學習一篇人類書寫的文章不是整體的來學習&#xff0c;而是一個詞一個詞的來學習。所以文本預處理的第一個步驟就是對文本進行分詞處理。&a…