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

嵌入式系统 (5.嵌入式Linux网络应用开发)

5.嵌入式 Linux 网络应用开发

5.1相关概念

客户端程序与服务端程序

在网络编程中,客户端程序与服务端程序是网络通信的两个基本角色。客户端发起请求,服务端响应请求并提供服务。
在这里插入图片描述

IP 地址与端口号

IP 地址用于标识网络设备的位置,而端口号标识运行在计算机上的具体进程。端口号范围为 0 至 65535,是计算机上不同网络服务的重要区分标志。
在这里插入图片描述

传输控制协议(TCP)与用户数据报协议(UDP)
  • TCP 是一种面向连接的协议,提供可靠的数据传输机制,确保数据包按序到达目标。
  • UDP 是一种无连接的协议,注重速度和效率,适合对数据传输顺序和完整性要求不高的应用场景。

5.2利用套接字进行网络编程的方法

套接字的定义

在 TCP/IP 协议中,套接字(Socket)是网络通信的基础单元,表示 IP 地址与端口号的组合,用于标识网络中的一个通信端点。例如,IP 地址 193.14.26.7 和端口号 13 可以共同组成一个套接字,方便数据在通信双方之间传输。
在这里插入图片描述

套接字的类型

套接字分为三种主要类型:

  • 字节流套接字(TCP 套接字):基于 TCP 协议,提供可靠的、面向连接的通信方式,确保数据的顺序和完整性。
  • 数据报套接字(UDP 套接字):基于 UDP 协议,采用无连接方式,注重效率但不保证数据可靠性,适用于对速度要求高、可靠性要求低的场景。
  • 原始套接字:允许直接访问底层协议(如 IP 或 ICMP),提供对 TCP 和 UDP 套接字无法实现的功能,通常用于构造自定义的网络协议。
套接字的创建

通过 socket 函数创建套接字,该函数返回一个非负整数作为套接字描述符,表示创建的套接字。其原型为:

int socket(int family, int type, int protocol);
  • 参数
    • family 指定协议族,如 AF_INET(IPv4)或 AF_INET6(IPv6)。
    • type 指定套接字类型,如 SOCK_STREAM(字节流)或 SOCK_DGRAM(数据报)。
    • protocol 指定具体协议,通常为 0 表示默认协议(如 TCP 或 UDP)。
套接字的绑定

使用 bind 函数将创建的套接字绑定到本地 IP 地址和端口号,从而确定通信的网络端点。函数原型如下:

int bind(int sockfd, struct sockaddr *myaddr, int addrlen);
  • 参数
    • sockfd 是套接字描述符。
    • myaddrstruct sockaddr 类型的指针,存储绑定的地址和端口信息。
    • addrlen 是地址结构的长度。
地址结构
  • 通用结构 struct sockaddr
    struct sockaddr {
         
        unsigned short sa_family;    /* 协议类型 (AF_xxx) */
        char sa_data[14];            /* 协议地址 (IP 地址和端口号) */
    };
    
  • 具体结构 struct sockaddr_in(IPv4 地址结构)
    struct sockaddr_in {
         
        short int sin_family;        /* 协议类型 (AF_INET) */
        unsigned short int sin_port; /* 端口号 */
        struct in_addr sin_addr;     /* IP 地址 */
        unsigned char sin_zero[8];   /* 填充 0 */
    };
    
建立连接
  • 客户端使用 connect 函数:客户端通过套接字尝试与服务器建立连接。

    int connect(int sockfd, const struct sockaddr *serv_addr

http://www.kler.cn/a/474315.html

相关文章:

  • 无网络时自动切换备用网络环境
  • WebSocket监听接口
  • 详细全面讲解C++中重载、隐藏、覆盖的区别
  • 用豆包MarsCode IDE打造精美数据大屏:从零开始的指南
  • 代码随想录 链表 test 5
  • 代码随想录day38 动态规划6
  • 使用TCP协议实现智能聊天机器人
  • Cline+DeepSeek-v3-软件工程的浪潮:从切图仔到AI辅助编程
  • 【Leetcode 热题 100】20. 有效的括号
  • markdown语法中的表格快速转换成word中的表格。
  • 【网页自动化】篡改猴入门教程
  • C#标识符和关键字
  • 2025.01.15docker
  • Pytorch单、多GPU和CPU训练模型保存和加载
  • C++二十三种设计模式之观察者模式
  • 强化学习入门谈
  • Linux C/C++编程-UDP套接字编程示例
  • 微软人工智能研究院推出OLA-VLM:一种以视觉为中心的方法来优化多模态大型语言模型
  • Redis Stream
  • Git指令
  • 一文读懂单片机的串口
  • 基于R语言的DICE模型实践技术应用;评估气候变化对经济的影响以及不同减排政策的经济成本和效益
  • Dify进阶:使用FastAPI和Selenium构建远程浏览器控制与录屏服务
  • 蓝桥杯python省赛备战day2--数组枚举--845数组中的最长山脉-枚举算法刷题学习笔记3--leetcode
  • NoSQL 基础知识总结
  • python【数据结构】