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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…