【Linux/C++网络篇(一) 】网络编程入门:一文搞懂 TCP/UDP 编程模型与 Socket 网络编程

6 阅读2分钟

Linux/C++ 网络篇(一)

网络编程入门:一文搞懂 TCP/UDP 编程模型与 Socket 核心流程

一、Socket 是什么

Socket 本质是内核提供的一套网络接口,把网络连接抽象成“文件”,让程序通过读写文件的方式收发数据。 它是TCP/UDP 编程的统一入口,也是 C++ 网络服务的基础。


二、TCP 编程模型(面向连接、可靠、流式)

核心特点

  • 面向连接,三次握手、四次挥手
  • 可靠传输、无丢失、无乱序、无重复
  • 字节流,无边界,需自己处理粘包
  • 适合:文件传输、HTTP、数据库、长连接服务

服务端流程(标准5步)

  1. socket() :创建套接字(AF_INET, SOCK_STREAM, 0)
  2. bind() :绑定 IP + 端口
  3. listen() :开启监听,设定等待队列
  4. accept() :阻塞等待客户端连接,返回新 fd
  5. read()/write() 或 recv()/send() :收发数据
  6. close():关闭连接

客户端流程(标准3步)

  1. socket() :创建套接字
  2. connect() :主动连接服务器
  3. read()/write() :收发数据
  4. close()

三、UDP 编程模型(无连接、不可靠、数据报)

核心特点

  • 无连接,不握手、不断开
  • 不可靠,可能丢包、乱序
  • 数据报模式,有边界,不粘包
  • 速度快、开销小
  • 适合:音视频、直播、DNS、心跳、游戏

服务端 & 客户端流程(几乎一样)

  1. socket() :创建套接字(SOCK_DGRAM)
  2. bind() :服务端必须绑定,客户端可选
  3. recvfrom() :接收数据(获取对方地址)
  4. sendto() :发送数据(指定目标地址) 无 connect、listen、accept。

四、TCP / UDP 核心区别(面试必背)

  • TCP:面向连接、可靠、流式、慢、适合精确传输
  • UDP:无连接、不可靠、数据报、快、适合实时传输

五、最简单 C++ Socket 模板(可直接跑)

TCP 服务端极简代码

// 创建socket -> bind -> listen -> accept -> recv/send
int lfd = socket(AF_INET, SOCK_STREAM, 0);
bind(lfd, ...);
listen(lfd, 128);
int cfd = accept(lfd, ...);
char buf[1024];
int n = recv(cfd, buf, 1024, 0);
send(cfd, "ok", 2, 0);

UDP 极简代码

// 创建socket -> bind -> recvfrom/sendto
int fd = socket(AF_INET, SOCK_DGRAM, 0);
bind(fd, ...);
char buf[1024];
struct sockaddr_in cliaddr;
recvfrom(fd, buf, 1024, 0, (sockaddr*)&cliaddr, ...);
sendto(fd, "ok", 2, 0, (sockaddr*)&cliaddr, ...);

六、本文总结

  • Socket = 网络编程入口
  • TCP = 可靠连接,标准 C/S 模型
  • UDP = 无连接数据报,轻量高效
  • 掌握这套模型,就能写 echo 服务器、HTTP 服务器、内网穿透、游戏网关等各类网络程序。

如果你需要,我可以在下一篇直接给你: 可编译运行的完整 TCP 服务端+客户端 C++ 代码(带错误处理)+ UDP 示例 + 粘包讲解