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是套接字描述符。myaddr是struct 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



















