ASP+SQL工资系统:面向中小制造企业的高确定性落地实践
2026/10/20 6:10:54
| 维度 | CS 模型 | BS 模型 |
|---|---|---|
| 客户端类型 | 专用客户端(定制开发) | 通用浏览器(无需定制) |
| 应用层协议 | 自定义 / 标准协议均可 | 固定使用 HTTP/HTTPS 协议 |
| 功能复杂度 | 功能丰富、逻辑复杂 | 功能轻量化、逻辑简单 |
| 资源存储 | 部分资源本地化存储 | 核心资源由服务器分发 |
TCP(Transmission Control Protocol,传输控制协议)是面向连接的可靠传输协议,核心特征如下:
| 特性 | 说明 |
|---|---|
| 面向连接 | 通信前需完成三次握手建立连接,断开需四次挥手,连接始终保持至主动断开 |
| 可靠传输 | 通过应答(ACK)、超时重传保证数据不丢失、不重复、按序到达 |
| 流式套接字 | 数据无边界,为连续字节流,接收方无法直接区分单次发送的数据块 |
| 全双工通信 | 两端均有发送 / 接收缓冲区,可同时收发数据 |
| 收发次数无关 | 发送方多次发送的数据,接收方可一次性读取(黏包问题根源) |
| 写阻塞机制 | 发送缓冲区满时(默认 64K),send 函数会阻塞,直至缓冲区有空闲空间 |
| 连接感知 | 一端断开连接,另一端可通过 recv 返回 0 / 错误感知,基于四次挥手保证优雅断开 |
c
运行
int socket(int domain, int type, int protocol);domain:地址族,AF_INET(互联网协议,IPv4)/AF_UNIX(本地进程通信);type:套接字类型,SOCK_STREAM(流式,TCP)/SOCK_DGRAM(数据报,UDP)/SOCK_RAW(原始套接字);protocol:协议类型,0 表示自动适配 type 对应的默认协议。c
运行
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);sockfd:socket () 返回的套接字 FD;my_addr:存储本机 IP、端口的地址结构体(struct sockaddr_in);addrlen:地址结构体的长度(sizeof (struct sockaddr_in))。c
运行
int listen(int sockfd, int backlog);sockfd:绑定后的套接字 FD;backlog:三次握手队列的最大长度(未完成连接队列 + 已完成连接队列)。c
运行
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd:监听套接字 FD;addr:输出参数,存储客户端的 IP + 端口(NULL 表示不关心);addrlen:输入输出参数,传入 addr 的长度,返回实际长度(addr 为 NULL 时设为 NULL)。c
运行
ssize_t recv(int sockfd, void *buf, size_t len, int flags);sockfd:服务器用 accept () 返回的通信 FD,客户端用 socket () 返回的 FD;buf:存储数据的缓冲区(数组 / 动态内存);len:期望读取的字节数;flags:读取方式,0 表示阻塞读取。c
运行
ssize_t send(int sockfd, const void *msg, size_t len, int flags);sockfd:同 recv () 的 sockfd 规则;msg:待发送的数据缓冲区;len:待发送的数据长度;flags:发送方式,0 表示阻塞发送。c
运行
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd:socket () 返回的客户端套接字 FD;addr:服务器的 IP + 端口地址结构体;addrlen:地址结构体长度。plaintext
socket() → bind() → listen() → accept() → recv()/send() → close()plaintext
socket() → connect() → send()/recv() → close()TCP 作为可靠的面向连接协议,是 CS/BS 模型的核心基础,掌握其核心特性、函数用法和编程流程,是网络开发的必备技能。重点需关注: