
书: https://pan.baidu.com/s/1LWWovU7IScpiddLrDhjl1w?pwd=pc5n
笔记如下:
- 套接字(Socket)基础:TCP/IP网络编程的核心是套接字,分为流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。
- TCP服务器流程:
socket()创建套接字bind()绑定IP和端口listen()进入监听状态accept()接受客户端连接read()/write()通信close()关闭连接
- TCP客户端流程:
socket()创建套接字connect()连接服务器read()/write()通信close()关闭连接
- UDP通信:无连接协议,使用
sendto()和recvfrom()直接收发数据。 - 地址处理函数:
inet_addr()将点分十进制IP转换为32位整数inet_ntoa()将网络字节序IP转换为字符串htons()/ntohs()主机与网络字节序转换
- 多进程服务器:通过
fork()创建子进程处理多个客户端连接。 - 进程间通信:使用管道(pipe)、消息队列等实现父子进程同步。
- I/O多路复用:
select()监控多个文件描述符poll()改进的selectepoll()Linux高性能I/O复用机制
- 信号处理:
SIGCHLD回收子进程SIGPIPE处理断开的管道
- 套接字选项:
SO_REUSEADDR允许重用本地地址SO_KEEPALIVE保持连接活性
- 超时设置:通过
setsockopt()设置SO_RCVTIMEO和SO_SNDTIMEO。 - 广播(Broadcast):UDP特有的
SO_BROADCAST选项实现局域网广播。 - 多播(Multicast):使用
IP_ADD_MEMBERSHIP加入多播组实现一对多通信。 - 线程安全:多线程服务器中需使用互斥锁(mutex)保护共享资源。
- HTTP服务器实现:解析HTTP请求报文(GET/POST),构造响应报文(状态行+头部+正文)。
- 域名解析:
gethostbyname()和getaddrinfo()实现域名到IP的转换。 - 非阻塞I/O:通过
fcntl()设置O_NONBLOCK标志实现非阻塞套接字。 - 心跳机制:定时发送心跳包检测TCP连接活性。
- 协议设计:自定义应用层协议时需考虑报文格式(长度+内容)、序列化等。
- 性能优化:
- 减少数据拷贝(零拷贝技术)
- 连接池管理
- 批量数据传输