2024年8月22日嵌入式学习

今日主要学习网络知识

udp

recvfrom

ssize_t recvfrom(int sockfd,    //socket的fd
                  void *buf,    //保存数据的一块空间的地址 
                 size_t len,    //这块空间的大小 
                  int flags,    // 0  默认的接收方式 --- 阻塞方式 
  struct sockaddr *src_addr,    //用来保存发送方的地址信息 
         socklen_t *addrlen     //表示发送方实际的地址信息大小
         );
         
返回值:
   成功 返回接收到的字节数 
   失败  -1 

bind

 int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
  
2、int bind(int sockfd, struct sockaddr *my_addr, 
             socklen_t addrlen);
功能:如果该函数在服务器端调用,则表示将参数1相关
      的文件描述符文件与参数2 指定的接口地址关联,
      用于从该接口接受数据。

      如果该函数在客户端调用,则表示要将数据从
      参数1所在的描述符中取出并从参数2所在的接口
      设备上发送出去。

      注意:
        如果是客户端,则该函数可以省略,由默认
            接口发送数据。
参数:
      sockfd 之前通过socket函数创建的文件描述符,套接字id
      my_addr 是物理接口的结构体指针。表示该接口的信息。

      struct sockaddr      通用地址结构 --- ip + 端口 
      {
          u_short sa_family;  地址族
          char sa_data[14];   地址信息
      };
      
      
      //本地 socket 
      //网络 ipv4 
      //     ipv6 

      转换成网络地址结构如下:
      struct sockaddr_in    ///网络地址结构
      {
          u_short           sin_family; //地址族
          u_short           sin_port;   //地址端口
          struct in_addr  sin_addr;   //地址IP  //"192.168.1.123"
          char               sin_zero[8]; //占位
      };
 
     //in_addr_t  === unsigned int 
      struct in_addr
      {
          in_addr_t s_addr;
      }

tcp

tcp 客户端:
//1.建立连接
socket        //买了一部手机 
bind //可选   //插上sim卡 
connect       //拨打电话 
....
//2.通信过程 
read 
write 
close 

tcp服务器:
//1.建立连接 
socket  //买了一部手机 
bind    //插上sim卡 
listen  //监听 客户端的连接请求 
accept  //接听 ---这一步完成之后 连接就建立好了,之后就可以收发数据  
..... 
//2.通信过程 
read 
write 
close 

connect

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
//拨打电话 --- 知道对方的号码 
1、int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);
   功能:该函数固定有客户端使用,表示从当前主机向目标
            主机发起链接请求。
   参数:sockfd 本地socket创建的套接子id
            addr 远程目标主机的地址信息。
         addrlen: 参数2的长度。
   返回值:成功 0
              失败 -1;
           
            struct sockaddr *addr //通用地址结构类型,并没有实际去用,实际用到都是具体地址结构类型
           
           struct sockaddr_in {
               sa_family_t    sin_family; /* address family: AF_INET */
               in_port_t      sin_port;   /* port in network byte order */
               struct in_addr sin_addr;   /* internet address */
           };

           /* Internet address. */
           struct in_addr {
               uint32_t       s_addr;     /* address in network byte order */
           };

listen

  • sockfd: 这是一个整数类型的套接字描述符,通常是通过socket()函数创建的。
  • backlog: 这是一个整数,表示在服务器接受连接之前,等待连接的队列的最大长度。也就是说,它决定了在拒绝连接之前,操作系统为这个套接字所允许的最大未决连接数。
返回值
  • 成功时,返回0。
  • 失败时,返回-1,并且可以通过errno获取错误码。
功能

listen函数的主要功能是使得套接字处于被动监听状态,这样它就可以接受来自客户端的连接请求。在调用listen之后,服务器会等待客户端的连接请求,可以通过accept函数接收这些请求。

accept

参数
  • sockfd: 这是一个socket描述符,通常是通过socket()bind()以及listen()函数创建和设置的监听套接字。
  • addr: 这是一个指向sockaddr结构体的指针,用于存储客户端的地址信息。可以传入NULL,但在这种情况下,客户端的地址信息将不会被填充。
  • addrlen: 这是一个指向socklen_t类型变量的指针,表示地址结构的大小,函数调用后会更新为实际填充的大小。
返回值
  • 成功时,返回一个新的套接字描述符,该描述符用于与连接的客户端进行通信。
  • 失败时,返回-1,并且可以通过errno获取错误码。
功能

accept函数的主要功能是接受一个连接请求并返回一个新套接字,这个新套接字用于与连接的客户端进行数据传输。调用accept后,服务器可以通过新的套接字与客户端进行双向通信。

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

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

相关文章

10 Java数据结构:包装类、数组(Array工具类)、ArrayList

文章目录 前言一、包装类1、Integer(1)基本用法(2)JDK5前的包装类用法(了解即可,能更好帮助我们理解下面的自动装箱和自动拆箱机制)(3)自动装箱与自动拆箱机制 --- 导致&…

基于HarmonyOS的宠物收养系统的设计与实现(一)

基于HarmonyOS的宠物收养系统的设计与实现(一) 本系统是简易的宠物收养系统,为了更加熟练地掌握HarmonyOS相关技术的使用。 项目创建 创建一个空项目取名为PetApp 首页实现(组件导航使用) 官方文档:组…

redis实战——go-redis的使用与redis基础数据类型的使用场景(一)

一.go-redis的安装与快速开始 这里操作redis数据库,我们选用go-redis这一第三方库来操作,首先是三方库的下载,我们可以执行下面这个命令: go get github.com/redis/go-redis/v9最后我们尝试一下连接本机的redis数据库&#xff0…

黑神话孙悟空:自媒体小白的流量密码!

当下,黑神话孙悟空的热度如熊熊烈火,席卷了整个游戏世界。 只要与这个话题沾边,似乎就能轻松吸引大量关注。 那么,对于不怎么懂自媒体运营的小伙伴来说,该如何抓住这个机遇呢? 别担心,我们用以…

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限

CleanMyMac是Mac系统下的一款专业的苹果电脑清理软件,同时也是一款优秀的电脑系统管理软件。它能有效清理系统垃圾,快速释放磁盘内存,缓解卡顿现象,保障系统顺畅地运行。 全磁盘访问权限,就好比机场内进行的安全检查。…

微软AI人工智能认证有哪些?

微软提供的人工智能认证主要包括以下几个方面: Azure AI Fundamentals(AI900认证):这是一个基础认证,旨在展示与Microsoft Azure软件和服务开发相关的基本AI概念,以创建AI解决方案。它面向具有技术和非技术…

Vue 导航条+滑块效果

目录 前言代码效果展示导航实现代码导航实现代码导航应用代码前言 总结一个最近开发的需求。设计稿里面有一个置顶的导航条,要求在激活的项目下面展示个下划线。我最先开始尝试的是使用 after 的伪类选择器,直接效果一样,但是展示的时候就会闪现变化,感觉不够自然,参考了一…

ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南

目录 全面掌握:JavaScript解构赋值的终极指南 一、数组解构赋值 1、基本用法 2、跳过元素 3、剩余元素 4、默认值 二、对象解构赋值 1、基本用法 2、变量重命名 3、默认值 4、嵌套解构 三、复杂的嵌套结构解构 四、函数参数解构赋值 1、对象解构作为函…

ARM——驱动——Linux启动流程和Linux启动

一、flash存储器 lash存储器,全称为Flash EEPROM Memory,又名闪存,是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息,因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单…

单细胞组学大模型(1)--- iSEEEK

–https://doi.org/10.1093/bib/bbab573 A universal approach for integrating super large-scale single-cell transcriptomes by exploring gene rankings 打算深挖单细胞大模型的一系列文章、算法和代码,按时间线来去学习也许会好一些,所以第一篇带…

Spring Cloud Consul面试题

​ ​ 您好,我是程序员小羊! 前言 Spring Cloud Consul 是微服务架构中的一个重要组件,用于服务发现、配置管理以及健康检查。了解 Spring Cloud Consul 的工作原理和应用场景,对于微服务开发者和架构师来说至关重要。以下是一些常…

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持,带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础,打造的全新沉浸文化项目“国宝数字体验展“,借由文物的视角、站在历史的星河中,探寻时间长河中不变的智慧…

CART决策树-基尼指数(全网最详解)

文章目录 一、基尼指数的定义二、基尼指数在CART决策树中的应用三、基尼指数与CART决策树的构建1.计算每个子集的基尼系数:2.计算基尼指数3.选择最优特征4.其余基尼指数5.构建决策树 四、总结 CART决策树基尼指数是CART(Classification And Regression T…

8-9月强化速成|30天带刷《严选题》《660》

如果你的目标是90-100分,肯定是够了,但是像下面这样微调一下更好 你的基础阶段做的是辅导讲义上的题目,那么你的基础阶段的题量肯定是够了。 但是强化阶段如果只做660题和严选题,这个题量还有有一些薄弱的,建议可以把…

四、4 逻辑操作符

按位与、按位或关注二进制位 逻辑与、逻辑或只关注真假 1、&&逻辑与(并且) 左边和右边都为真,结果为真(为1) 有一个为假,结果为假(为0) 2、|| 逻辑或(或者&a…

NumExpr加速计算(numpy表达式)

文章目录 一、简介二、安装三、函数详解四、性能评估 Python 性能优化:NumExpr Numba CuPy 一、简介 numexpr(全称:numpy expression):用于在 NumPy 表达式上快速执行元素级运算的 Python 加速库。 优势&#xff1…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

Element-ui table进阶使用

最近项目有多个报表开发的需求,我采用的是凤翎前端组件框架(基于element-ui开发),大伙可以直接参考element-ui组件库文档,把标签中的fks替换为el即可。下面我会按顺序一一展开细说这些需求: 1、有多级表头…

AI大模型开发——7.百度千帆大模型调用

本节旨在为读者提供一个实用指南,探讨如何有效地利用百度千帆大模型平台的强大功能。从基础的账号注册和密钥申请入手,逐步引领用户通过案例, 理解并掌握如何调用文本和图像处理的大模型 API, 包括但不限于 NLP、对话生成、文本续…

CV每日论文--2024.7.25

1、Diffusion Models for Monocular Depth Estimation: Overcoming Challenging Conditions 中文标题:单目深度估计的扩散模型:克服具有挑战性的条件 简介:本文提出了一种新颖的方法,旨在解决单张图像深度估计任务中具有挑战性的、超出分布范…