2024年8月22日嵌入式学习

news2025/1/13 10:02:41

今日主要学习网络知识

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.coloradmin.cn/o/2064515.html

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

相关文章

克服编程学习中的挫折感:从心态到策略的全方位指南

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 目录 引言 一、心态调整:积极乐观,合理期望 二、学习方法:有效策…

js中的字符串的length的知识点。

unicode字符集 unicode字符集是对世界上绝大部分字符进行编码,一个字符对应一个编码,范围:0x0000-0x10FFFF,可以表示一百多万个字符,其中0x0000-0xFFFF的字符为BMP(基本多语言平面字符集),剩余…

【大模型从入门到精通34】开源库框架LangChain 利用LangChain构建聊天机器人1

这里写目录标题 利用LangChain构建聊天机器人介绍介绍对话型聊天机器人构建环境环境变量和平台设置 加载文档和创建向量存储高级检索技术对话上下文和记忆纳入聊天历史会话缓冲内存 构建对话检索链环境设置与API密钥配置选择合适的语言模型版本Q&A系统设置 利用LangChain构…

无人机之喊话器的用途

无人机喊话器,俗称无人机扬声器,其用途广泛且多样化,主要体现在以下几个方面: 一、应急救援与指挥 紧急响应与指挥:在自然灾害(如山洪、火灾、地震等)或突发事件发生时,无人机搭载喊…

iOS App上架审核被拒——2.3.3 - Performance - Accurate Metadata

iOS上架审核被拒——Guideline 2.3.3 - Performance - Accurate Metadata 噢,又被拒了… 文章目录 iOS上架审核被拒——Guideline 2.3.3 - Performance - Accurate Metadata被拒原因解决 被拒原因 大概翻译了下:预览图问题,只因某张预览图加了…

前端开发攻略---在Vue3项目中修改Element-Plus主题色

1、演示 2、安装依赖 npm i use-element-plus-theme -d 3、使用 import { useElementPlusTheme } from use-element-plus-theme const { changeTheme } useElementPlusTheme()const changePrimaryColor () > {// 传入颜色changeTheme(red) } 4、演示代码 <templa…

[godot] 采用状态机时,如何处理攻击时移动?如“冲撞”

这里以‘史莱姆撞击’为例子&#xff0c;将‘空中跃进’定义为伤害帧。&#xff08;见下图&#xff09; 先梳理流程&#xff1a;a.史莱姆原地蓄力(起跳准备)--->b.跳起并移动一段距离(空中跃进)--->c.落地调整 一 当状态机进入‘攻击状态’时&#xff0c;在enter()中…

day40——数据库 sqlite3

1 安装sqlite3数据库以及sqlite3函数库 1&#xff1a;sudo apt install sqlite3 //安装数据库 2&#xff1a;sudo apt install libsqlite3-dev // 安装数据库的函数库 2 什么是数据库 一种存放数据的文件&#xff0c;但是该文件拥有特殊的结构 第一层结构&#xff1a;数据…

存储数据(常量)

常量&#xff1a;用来存储数据&#xff08;不可变&#xff09; 常量不能修改 //常量 const PI:number 3.14 const Name: string "啦啦啦" console.log(名字,Name) console.log(π等于,PI)前面带 后面不带&#xff0c;不然就是打印字符串了

PHPShort轻量级网址缩短程序源码开心版,内含汉化包

需要网址缩短并且想获得更多有关链接点击率和流量的数据分析&#xff0c;那么 PHPShort 可能是一个非常好的选择。PHPShort 是一款高级的 URL 缩短器平台&#xff0c;可以帮助你轻松地缩短链接&#xff0c;并根据受众群体的位置或平台来定位受众。 该程序基于 Laravel 框架编写…

算法——不得不磕!

OK,首先一个小问题——你知道国际大厂通用的筛人方法是什么吗&#xff1f;...... 只有两个&#xff1a; ①算法 Algorithm ②系统设计 SystemDesign 如果你在美国、加拿大&#xff0c;是应届生想找份工作&#xff0c;那么你其它什么都不用考&#xff0c;单单只考算法就够了。至…

科研绘图系列:Python语言时间趋势图

介绍 不同指标在时间上的变化,可以用时间序列线图表示趋势。 加载Python包 import sys import pandas as pd import numpy as np import scipy as sp from scipy import stats import randomimport seaborn as sns import matplotlib.pyplot as plt from matplotl

JavaScript(30)——解构

数组解构 数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法 基本语法&#xff1a; 赋值运算符左侧的[]用于批量声明变量&#xff0c;右侧数组的单元值将被赋值给左侧变量变量的顺序对应数组单元值的位置依次进行赋值操作 const arr [1, 2, 3, 4, 5]const [a, b…

教育部-华为产学合作协同育人项目 | 仓颉编程语言专项

为响应《教育部高等教育司关于调整产学合作协同育人项目运行模式及征集2024年产学合作协同育人项目的通知》号召&#xff0c;华为公司2024年第二批70个项目已发布&#xff0c;其中仓颉编程语言领域共计10个项目&#xff0c;如下所示&#xff0c;通过新工科建设项目&#xff0c;…

Apache CloudStack Official Document 翻译节选(六)

关于 Apache CloudStack 的 概念和专用术语 &#xff08;六&#xff09; Multi-Site Deployment Apache CloudStack可以通过使用多个专职地带&#xff08;即多数据中心&#xff09;扩展为多局点模式。下面的示意图就是一个多局点部署Apache CloudStack的示例。 下图中的数据中…

Linux 软件编程多路复用tcp

1.select的缺点&#xff1a; 1.select监听的文件描述符集合是一个数组&#xff0c;有上限&#xff08;1024个&#xff09; 2.select监听的文件描述符集合在应用层&#xff0c;内核层监听事件后需要传递给用户层带来资源开销 3.select需要用户手动查找产生事件的文件…

Vim youcompleteme Windows 安装保姆级教程

不说废话。 准备 检查 Vim 的 Python 配置 安装好 vim 和 python 后&#xff08;python 必须 ≥ \ge ≥ 3.6&#xff09;&#xff0c;在 cmd 下运行 vim --version会弹出以下窗口。 如果发现 python/dyn 和 python3/dyn 都是 - &#xff08;我不知道只有前者是 能不能运行…

解决nvm切换node版本不成功的问题(包含全网最正确最齐全的nvm安装配置,全网最细最有用的一篇)

废话前言&#xff1a; 因为现在已经接近实习尾声&#xff0c;我已经没有什么事可干了&#xff0c;于是我就从java后端和python转回前端&#xff0c;开始准备写写前端项目 但是当我重新打开那尘封已久的后端项目的时候&#xff0c;有些是之前GitHub拉去下来的vue项目&#xff0…

【I/O多路复用】

基于I/O多路复用的并发编程 I/O实现I/O多路复用select优缺点 pollepoll优点 I/O I/O复用是基于一个单进程或单线程的一个执行流当中监控多个输入输出流的技术&#xff08;网络套接字或者文件描述符进行监控&#xff09;。单进程或单线程&#xff0c;允许多个用户对单进程发起连…

virtualbox从u盘启动

1.添加到vboxusers用户组 sudo usermod -G vboxusers -a whoami 2.为u盘设备添加访问权限&#xff0c;注意替换对应的设备文件&#xff0c;我这里是/dev/sdf sudo chmod orw /dev/sdf 3.为u盘创建一个虚拟的硬盘镜像 sudo VBoxManage internalcommands createrawvmdk -fi…