Socket(套接字) 是计算机网络通信的核心技术,用于在不同主机或同一主机的进程间进行数据传输。它是操作系统提供的 API,抽象了底层网络协议的细节(如TCP/IP),使开发者能够通过简单的接口实现网络编程。
核心概念
通信端点
Socket是网络通信的“端点”,每个Socket绑定一个 IP地址 + 端口号,标识唯一的通信目标。协议支持
- 流式Socket(SOCK_STREAM):基于TCP,可靠、面向连接(如HTTP、FTP)。
- 数据报Socket(SOCK_DGRAM):基于UDP,无连接、高效但不可靠(如DNS、视频流)。
- 原始Socket(SOCK_RAW):直接访问底层协议(如ICMP)。
- 流式Socket(SOCK_STREAM):基于TCP,可靠、面向连接(如HTTP、FTP)。
工作流程
- 服务端:创建Socket → 绑定IP/端口 → 监听连接 → 接受请求 → 读写数据。
- 客户端:创建Socket → 连接服务端 → 读写数据。
- 服务端:创建Socket → 绑定IP/端口 → 监听连接 → 接受请求 → 读写数据。
关键函数(C/C++示例)
#include <sys/socket.h>
// 创建Socket
int socket(int domain, int type, int protocol);
// 绑定地址
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
// 监听连接(TCP)
int listen(int sockfd, int backlog);
// 接受连接(TCP)
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
// 发送/接收数据
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
应用场景
- Web服务器(如Nginx、Apache)
- 实时通信(如游戏、聊天工具)
- 分布式系统(节点间数据交换)
常见问题
- 粘包问题:TCP是字节流协议,需自定义协议分隔消息(如长度前缀)。
- 非阻塞IO:使用
select/poll/epoll
处理高并发连接。
如果需要具体代码示例或深入某个方向,可以进一步说明!
内容由零声教学AI助手提供,问题来源于学员提问