当前位置: 首页 > news >正文

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.mrgr.cn/news/12565.html

相关文章:

  • Linux——文件系统层次结构,绝对路径
  • 视频提取字幕的软件有哪些?5款高识别率工具任你选
  • SpringBoot文档之构建包的阅读笔记
  • spring security怎么解决用户的权限问题
  • SAP 有趣的‘bug‘ 选择屏幕输入框没了
  • 小白之 FastGPT Windows 本地化部署
  • Linux内核定时器
  • 5G SSB(Synchronization Signal/PBCH, 同步广播块
  • HarmonyOs应用权限申请,system_grant和user_grant区别。本文附头像上传申请user-grant权限代码示例
  • C HTML格式解析与生成
  • 深度学习学习经验——深度学习名词字典
  • [Meachines] [Easy] jerry Tomcat用户暴力破解+war包webshell上传
  • 腾讯地图接入报错vue.runtime.esm.js:4605[Vue warn]: Error in v-on handler: “far <= 0“
  • 基于单片机的无线空气质量检测系统设计
  • SQL Server 查询语句中,对索引列做CONVERT的影响
  • STM32自制手持小风扇实验
  • HTTP/1和HTTP/2
  • 【C++】异常 详解
  • 解决ONENOTE复制文字到外部为图片(Ditto)
  • PyTorch构建神经网络