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

发布于:2025-02-10 ⋅ 阅读:(38) ⋅ 点赞:(0)

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

网站公告

今日签到

点亮在社区的每一天
去签到