一、UDP通信1.核心函数原型recvfrom接受数据并获取源地址ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr*src_addr,socklen_t*addrlen);src_addr参数会自动填充发送方的ip和端口这是实现“回射服务器”的基础。sendto发送数据到指定地址ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);每次发送都需要指定目标地址dest_addr.2.三种通信模式单播一对一。标准的客户端/服务器通信。广播一对所有局域网内。设置需调用setsockopt启用SO_BROADCAST选项。地址目标 IP 为255.255.255.255(受限广播) 或子网定向广播地址。组播一对多特定组。设置发送端指定组播地址接收端需调用setsockopt加入组播组 (IP_ADD_MEMBERSHIP)。二、 高性能IO模型阻塞与非阻塞IO阻塞IO默认模式。recv/send时若无数据或缓冲区满线程挂起等待。非阻塞IO通过fcntl设置O_NONBLOCK。若操作不能立即完成函数立刻返回错误 (EAGAIN/EWOULDBLOCK)需轮询尝试。IO多路复用 (I/O Multiplexing)作用单线程管理多个Socket连接避免为每个连接创建线程/进程的开销。select函数int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);缺点监听文件描述符数量有限 (通常1024)每次调用需重新传入集合存在用户态/内核态拷贝。poll函数int poll(struct pollfd *fds, nfds_t nfds, int timeout);优点基于链表存储无最大连接数限制pollfd结构体包含events(关注事件) 和revents(实际发生事件)。常用事件宏POLLIN可读POLLOUT可写POLLERR错误POLLHUP挂起三、 并发服务器模型多进程并发模型 (fork)原理父进程负责accept子进程负责recv/send。资源释放子进程退出后需防止僵尸进程 (使用signal(SIGCHLD, handler)或waitpid)。优化预创建进程池(Pre-forking)避免频繁创建销毁进程的开销。多线程并发模型 (pthread)原理主线程监听新连接创建新线程处理。注意线程间共享数据需加锁 (互斥量)且一个线程崩溃可能导致整个进程崩溃。IO多路复用模型 (Select/Poll)原理单线程循环调用select/poll检测所有 Socket 状态。流程将监听 Socket 加入集合。select返回就绪的描述符。遍历集合若是监听 Socket 则accept若是通信 Socket 则recv/send。函数名所属模型核心作用关键参数/标志recvfromUDP接收数据并获取源地址src_addr(输出参数获取发送方信息)sendtoUDP发送数据到指定地址dest_addr(指定目标 IP/Port)setsockoptUDP设置套接字选项SO_BROADCAST(广播),IP_ADD_MEMBERSHIP(组播)selectIO多路复用监视多个文件描述符状态fd_set集合,timeout(超时时间)pollIO多路复用监视多个文件描述符状态struct pollfd(包含 events/revents),nfdsfork进程创建子进程子进程返回 0父进程返回子进程 PID