一、Socket 编程是什么
Socket(套接字)是网络通信的编程接口,是应用层与 TCP/IP 协议族通信的中间软件抽象层。简单来说,它是两个网络程序之间实现数据传输的'桥梁'。无论是 TCP 还是 UDP 协议,都可以通过 Socket 接口实现跨主机、跨网络的进程间通信,也是实现网络编程的基础核心。
Socket 编程主要分为TCP Socket和UDP Socket两类:
- TCP Socket:基于面向连接的 TCP 协议,提供可靠、有序、字节流的传输,适用于文件传输、登录认证等对数据可靠性要求高的场景。
- UDP Socket:基于无连接的 UDP 协议,提供无可靠保证、面向数据报的传输,传输速度快、开销小,适用于聊天、音视频传输、广播等对实时性要求高的场景。
本文重点讲解UDP Socket的核心基础与常用接口,TCP Socket 将在后续补充。
二、UDP Socket 编程核心特点
UDP 是无连接的传输层协议,决定了 UDP Socket 编程的核心特性,也是与 TCP Socket 的核心区别:
- 无连接:通信双方无需提前建立连接,客户端直接向服务端发送数据报,服务端直接接收即可。
- 面向数据报:数据以'数据报'为单位传输,每次发送/接收都是一个完整的数据报,数据报大小有限制(通常小于 64K)。
- 无需维护连接状态:服务端可同时接收多个客户端的数据,无需为每个客户端维护连接,资源开销小。
- 无可靠保证:数据传输可丢失、乱序,UDP 协议不提供重传、确认机制,可靠性由应用层自行实现。
- 全双工通信:一个 Socket 描述符(fd)既可以用于读取数据,也可以用于写入数据,支持同时收发。
三、UDP Socket 编程核心接口(Linux 下 C/C++)
UDP Socket 编程的接口均来自 Linux 系统的网络编程头文件,核心头文件包含:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
所有接口的返回值均为int/ssize_t,返回 -1 表示调用失败,可通过 errno 和 strerror(errno) 查看错误原因。
1. socket() —— 创建套接字描述符
功能:创建一个 Socket 描述符,作为后续网络通信的句柄,相当于打开一个'网络文件'。
函数原型:
;

