1. 网络套接字编程基础概念
在Linux环境下,网络套接字(Socket)是进程间通信的重要机制,它允许不同主机上的应用程序通过网络进行数据交换。套接字本质上是一个抽象层,位于传输层协议(如TCP/UDP)与应用层之间,为开发者提供了统一的编程接口。
套接字编程的核心在于理解以下几个关键概念:
- IP地址:标识网络中的主机,IPv4为32位地址(如192.168.1.1),IPv6为128位地址
- 端口号:16位整数(0-65535),用于区分同一主机上的不同服务
- 协议类型:TCP(面向连接、可靠传输)和UDP(无连接、高效但不可靠)是最常用的两种
注意:实际编程中应避免使用1024以下的端口号,这些端口通常被系统服务保留。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 套接字编程核心步骤详解
2.1 TCP套接字编程流程
TCP套接字编程遵循典型的客户端/服务器模型,其核心步骤如下:
服务器端实现:
- 创建套接字:
socket(AF_INET, SOCK_STREAM, 0) - 绑定地址:
bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) - 监听连接:
listen(sockfd, backlog) - 接受连接:
accept(sockfd, (struct sockaddr*)&cli_addr, &clilen) - 数据读写:
read()/write()或recv()/send() - 关闭连接:
close()
客户端实现:
- 创建套接字:同服务器端
- 连接服务器:
connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) - 数据读写:同服务器端
- 关闭连接:同服务器端
2.2 UDP套接字编程差异
UDP编程相比TCP更为简单,主要区别在于:
- 不需要
listen()和accept()步骤 - 使用
sendto()和recvfrom()替代send()/recv() - 不需要建立连接,直接发送数据报
c复制// UDP服务器示例代码片段
sockfd = sock
