Linux udp编程

在这里插入图片描述

  • 我最近开了几个专栏,诚信互三!
    ====> |||《算法专栏》::刷题教程来自网站《代码随想录》。|||
    ====> |||《C++专栏》::记录我学习C++的经历,看完你一定会有收获。|||
    ====> |||《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。|||
    ====> |||《C#专栏》::记录我复习C#的经历,深度理解查漏补缺,不定期更新。|||
    ====> |||《计算机网络专栏》::记录我学习计算机网络,看完你一定会有收获。|||

Linux udp编程

  • udp通信原理
  • udp通信接口
    • socket创建
    • 网络通信结构体
    • bind port和ip
    • 接收信息接口
    • 发送信息接口
  • 其他网络接口

udp通信原理

udp是用户数据报协议不面向链接的不可靠传输。
udp协议使用socket进行通信,socket包含两个部分:(ip-port),可以表示网络中的某个主机和某个进程。

udp通信服务端建立如下
1).创建socket。
2).将socket和本地ip和port,bind。
3).使用recvfrom,sendto接口,接收,发送信息。
udp客户端建立如下
1).创建socket。
2).本地隐式将sokcet和本地ip和port绑定。
3).使用recvfrom,sendto接口,接收,发送信息。

udp通信接口

支持udp通信接口较多。

socket创建

socket接口如下


参数1:domain,决定通信域,其接收一些宏,如AF_INET(ipv4),AF_INET(ipv6),同时也可以基于udp进行域间通信,还可以进行网络管理,还可以跨网络通信。
参数2:type,决定套接字通信类型,依旧接收一个宏,如SOCK_DGRAM,及代表数据报通信。
参数3:protocol,当前两个参数决定后,该参数传递0。
retval:返回一个socket值,socket在底层是一个文件描述符,上层的进程就是通过该描述符通信的,类似于打开网卡。

当domain = AF_INET,type = SOCK_DGRAM代表udp通信。

网络通信结构体

struct sockaddr,struct sockaddr_in,struct sockaddr_un。
在这里插入图片描述
sockaddr是父类接口,其他接口是子类接口,在使用的时候,我们都使用sockaddr_in/sockaddr_un,但是在使用参数的时候,为了保证可以通用一个接口,在接口参数设计的时候,都使用的是sockaddr。
1).sockaddr_in:用于网络间通信,其结构体如下。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在该结构体中,存在sin_port,sin_addr(结构体),sin_family(指定通信域)。

bind port和ip

bind接口如下

在这里插入图片描述
参数1:sockfd,传入一个sock文件描述符,代表绑定某个socket。
参数2:addr,传入当地的,要绑定的ip和端口号,在服务端,sockaddr_in中,我们一般不绑定一个确定的ip,而通过宏INADDR_ANY,来代表当前主机。
参数3:addrlen,将参数2的大小算出,传入其中。
retval:小于零,代表bind函数错误。

接收信息接口

recvfrom接口如下

在这里插入图片描述
参数1:sockfd,从那个sockfd中接收信息。
参数2:buf,将接收到的信息放入buf中。
参数3:len,代表buf中的有效个数。
参数4:flag,一般传入0.
参数5:src_addr,为了能够在接收信息后,知道信息的发送方,传入一个输出参数。
参数6:addrlen,该参数的类型是一个自定义类型,其实代表无符号整型,该参数就是传入该类型的指针。
retval:返回收到的内容的字节数。

发送信息接口

sendto接口如下

在这里插入图片描述
参数1:sockfd,从那个sockfd中接收信息。
参数2:buf,将发送的信息放入buf中,发送出去。
参数3:len,代表buf中的有效个数。
参数4:flag,一般传入0.
参数5:dest_addr,发送信息的目的sockaddr。
参数6:addrlen,其实代表无符号整型,直接传入一个值。

其他网络接口

在udp通信中还存在许多网络接口,如网络字节序转换接口,ip字符串到4字节相互转换接口,清空内存空间接口等等。
1).网络字节序转换接口
各个主机的字节序不同,有的主机是大端字节序,有的主机是小端字节序,为了确定内容在网络中的传递,在网络中传递的数据都是通过大端字节序传递的,所以在主机中,我们要通过网络通信,就要将传递的结构体内容转为大端。
在这里插入图片描述
2).ip字符串到4字节相互转换接口
在客户端,我们需要传递信息,就必须知道目的ip和port,需要将字符串ip转换为32位数字ip,
存在以下接口
在这里插入图片描述
inet_aton接口,将点分十进制字符ip转换为in_addr的4字节ip,返回值0,失败,非0,成功。
在这里插入图片描述
接口inet_ntoa,将4字节ip转换为字符串ip,该接口返回字符串的地址,该接口存在线程安全问题,该接口内部会在同一个静态区创建一个字符串,并且返回它的地址,所以多线程并发访问时,会造成线程安全问题。
3).清空内存空间接口
在使用struct sockaddr_in/struct sockaddr_un接口时,需要清空内存空间,就可以使用bzero接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空间计量模型及 Stata 具体操作步骤

目录 一、引言 二、空间计量模型理论原理 空间自回归模型(SAR): 空间误差模型(SEM):, 空间杜宾模型(SDM): 三、实证模型构建 四、数据准备 五、Stata …

14-56 剑和诗人30 - IaC、PaC 和 OaC 在云成功中的作用

介绍 随着各大企业在 2024 年加速采用云计算,基础设施即代码 (IaC)、策略即代码 (PaC) 和优化即代码 (OaC) 已成为成功实现云迁移、IT 现代化和业务转型的关键功能。 让我在云计划的背景下全面了解这些代码功能的当前状态。我们将研究现代云基础设施趋势、IaC、Pa…

【电路笔记】-C类放大器

C类放大器 文章目录 C类放大器1、概述2、C类放大介绍3、C类放大器的功能4、C 类放大器的效率5、C类放大器的应用:倍频器6、总结1、概述 尽管存在差异,但我们在之前有关 A 类、B 类和 AB 类放大器的文章中已经看到,这三类放大器是线性或部分线性的,因为它们在放大过程中再现…

Collection 和 Collections 的区别与用法

Collection 和 Collections 的区别与用法 1、Collection 接口1.1 主要特点1.2 常见方法 2、 Collections 工具类2.1 主要特点2.2 常见方法 3、示例代码3.1 使用 Collection 接口3.2 使用 Collections 工具类 4、总结 💖The Begin💖点点关注,收…

STM32学习历程(day6)

EXTI外部中断使用教程 首先先看下EXTI的框图 看这个框图就能知道要先初始化GPIO外设 那么和前面一样 1、先RCC使能时钟 2、配置GPIO 选择端口为输入模式, 3、配置AFIO,选择我们用的GPIO连接到后面的EXTI 4、配置EXTI,选择边沿触发方式…

LVS实验

LVS实验 nginx1 RS1 192.168.11.137 nginx2 RS2 192.168.11.138 test4 调度器 ens33 192.168.11.135 ens36 12.0.0.1 test2 客户端 12.0.0.10 一、test4 配置两张网卡地址信息 [roottest4 network-scripts]# cat ifcfg-ens33 TYPEEthernet BOOTPROTOstatic DEFROUTEyes DEVIC…

详解平面DP(上)

前言 其实平面DP和正常的dp没有什么本质上的区别,只不过是在二维的面上进行DP,而且,客观的说,其实和递推没有什么区别,不要把他想的太难了 讲解 本蒻鸡思前想后,好像关于平面DP的理论知识好像没有什么&a…

前后端分离系统

前后端分离是一种现代软件架构模式,特别适用于Web应用开发,它强调将用户界面(前端)与服务器端应用逻辑(后端)相分离。两者通过API接口进行数据交互。这种架构模式的主要优势在于提高开发效率、维护性和可扩…

Git命令常规操作

目录 常用操作示意图 文件的状态变化周期 1. 创建文件 2. 修改原有文件 3. 删除原有文件 没有添加到暂存区的数据直接 rm 删除即可: 对于添加到暂存区的数据 文件或目录: 4. 重命名暂存区数据 5. 查看历史记录 6. 还原历史数据 恢复过程的原…

最新深度技术Win7精简版系统:免费下载!

在Win7电脑操作中,用户想要给电脑安装上深度技术Win7精简版系统,但不知道去哪里才能找到该系统版本?接下来系统之家小编给大家带来了深度技术Win7系统精简版本的下载地址,方便大家点击下载安装。系统安装步骤已简化,新…

设计模式8-桥模式

设计模式8-Bridge 桥模式 由来与目的模式定义结构代码推导1. 类和接口的定义2. 平台实现3. 业务抽象4. 使用示例总结1. 类数量过多,复杂度高2. 代码重复3. 不符合单一职责原则4. 缺乏扩展性改进后的设计1. 抽象和实现分离(桥接模式)2. 抽象类…

学习XDMA—20240709

概览: 在内部,子系统可以配置为实现多达8个独立的物理DMA引擎(最多4个H2C和4个C2H)。这些DMA引擎可以映射到单独的AXI4Stream接口,也可以将共享的AXI4内存映射(MM)接口映射到用户应用程序。在axis4 MM接口上,PCI Express的DMA/桥接…

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身? Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…

Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换

Profibus和ModbusTCP是工业控制自动化常用的二种通信协议。Profibus是一种串口通信协议,它提供了迅速靠谱的数据传输和各种拓扑结构,如总线和星型构造。Profibus可以和感应器、执行器、PLC等各类设备进行通信。 ModbusTCP是一种基于TCP/IP协议的通信协议…

一次零基础 自“信息收集“到“权限维持“的渗透测试全程详细记录

一、渗透总流程 1.确定目标: 在本靶场中,确定目标就是使用各种扫描工具进行ip扫描,确定目标ip。 2.信息收集: 比如平常挖洞使用fofa,天眼查,ip域名等进行查,在我们这个靶场中比如使用Wappalyz…

基于网络编码的 tcp 变种-tcp/nc

tcp/nc 是指 “tcp with network coding”,是一种结合了网络编码技术的 tcp 变种,网上资源很少,我也不准备多介绍,只介绍它的核心。 传统 tcp 在演进过程中一直搞不定效率问题,网络带宽在增长,cpu 却没有变…

区间贪心

目录 1.贪心算法的思想 2.区间贪心算法常用的一些题目类型 1.选择最多不相交区间问题 P2970 [USACO09DEC] Selfish Grazing S 1.思路分析 2.上代码 2.区间选点问题 P1250 种树 1.题目 2.方法一 1.代码解释 3.方法二 3.区间合并问题 P2434 [SDOI2005] 区间 1. 思路…

Java集合面试题

Java集合框架 1、List、Set、Map的区别2、ArrayList、LinkedList、Vector区别3、为什么数组索引从0开始,而不是从1开始?4、ArrayList底层的实现原理5、红黑树、散列表6、HashMap的底层原理7、HashMap的put方法具体流程8、HashMap的扩容机制9、HashMap是怎…

南方科技大学马永胜教授给年轻人使用AI工具上的建议

摘要 - 1. AI的未来,是机器人和机器人之间的合作; 2. 行业的发展方向是需求决定的,不要做同质化的发展,要做专/精/特/新; 3. 新质生产力 ( 科学技术革命性突破 生产要素创新型配置 产业深度转型升级&…

java通过poi-tl导出word实战详细步骤

文章目录 与其他模版引擎对比1.引入maven依赖包2.新建Word文档exportWprd.docx模版3.编写导出word接口代码4.导出成果 poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让…