UDP通信

UDP通信

  • 1、UDP
  • 2、UDP通信流程

1、UDP

/*
udp传输层协议,和tcp是一样的
特点:面向无连接的,不安全的,报式传输协议1.无连接:ldp通信的时候不需要connect1) 通信不需要建立连接2) 如果想给对方发送数据,只需要指定对方的IP和端口2. udp会丢包1) 数据丢失了就没有了,没有数据校验机制2) udp不会丢失一部分数据,丢就是全丢,不丢就是一点不不丢3.报式:发送端发送多少数据,接牧端接收多少数据|
*/

2、UDP通信流程

udp通信过程中,服务器和客户端做的操作几乎是一样的
在这里插入图片描述

  1. 服务器端
// 1. 创建一个通信的套接字   AF_INET使用IPv4 
int cfd = socket(AF_INET,SOCK_DGRAM,0); //通信使用udp
// 2.通信的套接字和本地的IP和端口绑定
// 绑定的目的:程序启动之后不主动发送数据,先接收数据,就需要绑定端口
// 如果不手动绑定端口,就会自动绑定端口,主动发送数据,可以自动绑定端口
struct sockaddr_in addr ;
bind(cfd, (struct sockaddr* )&addr, sizeof(addr) );
//  3.通信
接收数据:recvfrom( ) ;
发送数据:sendto();
// 4. 关闭通信的文件描述符
close(); 
  1. 客户端
// 1. 创建一个通信的套接字  
int cfd = socket(AF_INET,SOCK_DGRAM,0); //通信使用udp
// 2.通信的套接字和本地的IP和端口绑定
// 绑定的目的:程序启动之后不主动发送数据,先接收数据,就需要绑定端口
// 如果不手动绑定端口,就会自动绑定端口
struct sockaddr_in addr ;
bind(cfd, (struct sockaddr* )&addr, sizeof(addr) );
//  3.通信
接收数据:recvfrom( ) ;
发送数据:sendto();
// 4. 关闭通信的文件描述符
close();
  1. 操作函数
//接收数据
ssize_t recvfrom( int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen) ;
参数∶- sockfd:通信的文件描述符- buf:指向一块有效内存地址,存储接收的数据- len:参数buf指向的内存大小- flags:使用默认属性,指定为0即可- src_addr:传出参数,保存发送端的地址信息(IP和端口)->大端(网络字节序)- 对发送端的地址不感兴趣,可以指定为NULL- addrlen:传入传出参数,类似于accept()最后一个参数- src_addr为NULL,该参数也指定为NULL即可
返回值:>0:接收的字节数-1:失败//发送数据函数
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
参数:- sockfd:通信的文件描述符- buf:指向一块有效内存地址,内存中存储了待发送的数据- len:参数buf指向的内存中待发送的数据长度- flags:使用默认属性,指定为0即可- dest_addr:传入参数,保存接收端的地址信息(IP和端口)->大端(网络字节序)- addrlen:传入参数,dest_addr参数指向的内存大小
返回值:>0: 发送的字节数-1:失败

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

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

相关文章

使用键盘控制Franka机械臂运动

功能说明 使用键盘按键,可以控制franka机械臂7个关节角,已在真机上验证。 代码 主要使用的是官方包内的 franka_example_controllers 1、修改 include下的 joint_position_example_controller.h, 改为如下: // Copyright (c) 2017 Frank…

CRC(循环冗余校验码的校验方法)

5个关键点: 1.信息码:即给出要校验的二进制码 2.生成多项式:一般多项式会给,从最高位的指数位数就可以得到有几个校验码;如果没给多项式,肯定会给个多项式二进制码,根据它来推就行(…

群体AI介绍

本文为介绍性文章,只是为了扩宽视野。 群体AI 1、简介 群体AI,也称为集体智能(collective intelligence),是指通过联合多个智能体(如人类、机器或其他智能系统)的智能和资源来解决问题的一种方…

华为GaussDB数据库

Gauss数据库初识_高斯数据库_ygpGoogle的博客-CSDN博客 Redhat 7.6安装GaussDB_100_1.0.1详细攻略_gaussdb_100_1.0.1-database-redhat-64bit.tar.gz dow_博德1999的博客-CSDN博客 https://www.ngui.cc/el/3381579.html?actiononClick 初识GaussDB——GaussDB的发展历程、部…

Java基础(二十四):MySQL

文章目录 一、数据库(创建、显示、删除、备份、恢复)二、MySQL常用数据类型2.1 数值型(整数)2.2 数值型(二进制bit)2.3 数值型(小数)2.4 字符型2.5 日期类型 三、表结构的操作四、表…

3.docker仓库(Nexus、Harbor)的安装

本文目录 前言1.Aliyun 镜像仓库2.Nexus1.Nexus 私服搭建2.登录控制台3.配置nexus仓库4.配置nexus仓库地址为安全的镜像地址5.镜像推送至nexus仓库6.拉取nexus仓库镜像3.Harbor1.Docker Compose 安装2.Harbor安装3.配置Harbor仓库地址为安全的镜像地址4.创建项目5.镜像推送至Ha…

将函数实现放到CPP报“无法解析的外部符号...”,系VS Bug

发现一个现象,就是项目中有一个类,如果将函数实现全部放到头文件中,编译不报错,如果将函数实现放到CPP中则始终提示“无法解析的外部符号...”,考虑到放到头文件中能正常编译运行,显然这里不符合“无法解析…

软件设计师-UML基础教程

场景 针对UML1.5各种模型图的构成和功能进行说明。 UML概述 UML简介 UML (Unified Modeling Language)为面向对象软件设计提供统一的、标准的、可视化的建模语言。 适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。 UML的定义包括UML语义和UML表…

【CVPR2021】MVDNet论文阅读分析与总结

Challenge: 现有的目标检测器主要融合激光雷达和相机,通常提供丰富和冗余的视觉信息 利用最先进的成像雷达,其分辨率比RadarNet和LiRaNet中使用的分辨率要细得多,提出了一种有效的深度后期融合方法来结合雷达和激光雷达信号。 MV…

输电线路故障诊断(Python代码,逻辑回归、决策树、随机森林、XGBoost和支持向量机五种不同方法诊断)

效果视频:输电线路故障诊断(Python代码,逻辑回归、决策树、随机森林、XGBoost和支持向量机五种不同方法诊断)_哔哩哔哩_bilibili 1.数据 仿真平台 仿真模型分别获取单相接地故障、两相接地故障、两相间短路故障、三相接地故障、…

2023年浦东新区数字化安全风险智慧管控技能比武初赛-技能题一

目录 二、技能题 2.1 MD5===MD5 三、业*&&&务**&&联&&&*&&系 二、技能题 2.1 MD5===MD5

@Autowired、@Resource、@Qualifier

Autowired、Resource、Qualifier 1.Autowired和Resource 先看看Autowired和Resource的定义。 Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) Retention(RetentionPolicy.RUNTIME) Docume…

Flutter动态化开发之Fair实战

一、背景 目前移动端应用的版本更新, 最常见的方式是定期发版,无论是安卓还是iOS,都需要提交新的安装包到应用市场进行审核。审核通过后,用户在应用市场进行App的下载更新。而动态化, 就是不依赖更新程序安装包, 就能动态实时更新页面的技术。 相比动态化技术,定期发版…

线性代数的本质(九)——二次型与合同

文章目录 二次型与合同二次型与标准型二次型的分类度量矩阵与合同 二次型与合同 二次型与标准型 Grant:二次型研究的是二次曲面在不同基下的坐标变换 由解析几何的知识,我们了解到二次函数的一次项和常数项只是对函数图像进行平移,并不会改变…

day40 设计模式、jdk8新特性

一、代理模式 为其他对象提供一种代理控制此对象的访问 若一个对象不适合直接引用另一个对象, 代理对象在客户端和目标对象之间起到中介作用 组成: 抽象角色:通过接口 抽象类 真实角色实现了哪些方法 代理角色:实现抽象角色…

k8s集群中部署服务之部署描述文件准备

微服务部署描述文件Deploy.yaml 一、各微服务创建部署描述文件 1.1 mall-auth-server --- apiVersion: apps/v1 kind: Deployment metadata:name: mall-auth-servernamespace: sangomalllabels:app: mall-auth-server spec:replicas: 1selector:matchLabels:app: mall-auth-s…

Python用若干列的数据多条件筛选、去除Excel数据并批量绘制直方图

本文介绍基于Python,读取Excel数据,以一列数据的值为标准,对这一列数据处于指定范围的所有行,再用其他几列数据数值,加以筛选与剔除;同时,对筛选与剔除前、后的数据分别绘制若干直方图&#xff…

设置伙伴(buddy)-给窗口控件增加快捷键

在官方教程或者很多qt程序中经常看到能使用全键盘操作软件,那么QT creator也支持了这一特性,就是使用设置伙伴来实现的。 我们可以在设计界面按照如下几步实现: 先放置label 再放置一个lineEdit控件。 这个时候我们就可以开始伙伴绑定的步骤…

clip模型

文章目录 前言1 如何实现?1.概论2 训练3.有什么用?1.如何进行推理 4 通过代码来玩clip模型 前言 本文专门开一节写SD原理相关的内容,在看之前,可以同步关注: stable diffusion实践操作 CLIP,OPENAI 的产品…

JVM 虚拟机 ----> Java 类加载机制

文章目录 JVM 虚拟机 ----> Java 类加载机制一、概述二、类的生命周期1、类加载过程(Loading)(1)加载(2)验证(3)准备(4)解析(5)初始…