在掌握了 Linux 系统编程的基础之后,网络编程往往是许多学习者从“能写代码”迈向“能构建分布式系统”的关键门槛。本章《网络编程》便是这座桥梁的核心,它并非简单地罗列 API,而是通过严谨的逻辑层层递进,带你深入理解数据如何在不同的机器之间可靠或高效地传递。

课程开篇并未急于进入代码,而是花费了大量篇幅回顾 TCP/IP 协议族、局域网通信原理以及跨网通信的机制。这一步至关重要,因为脱离协议栈谈 Socket 编程无异于空中楼阁。只有理解了 IP 地址定位主机、端口号定位进程的本质,以及 TCP 三次握手、四次挥手的底层逻辑,你才能在后续调试网络问题时具备“透过现象看本质”的能力。接着,课程详细剖析了 TCP 协议的三大特性:面向连接、可靠传输和字节流服务,并给出了经典的 TCP 服务器/客户端编程模型——从创建 Socket、绑定地址、监听端口到接受连接,这一流程构成了所有 TCP 开发的基石。

核心章节深入讲解了 Socket 编程中的关键函数。`socket()` 函数的 domain 参数决定了通信域(如 AF_INET 代表 IPv4),type 参数区分了流式(TCP)与数据报(UDP)两种模式;`bind()` 函数将抽象的端口号与具体的网络接口绑定;而 `htons()` 与 `inet_addr()` 则解决了网络字节序与主机字节序之间的转换痛点,这是初学者极易踩坑的细节。对于 TCP 通信,`listen()` 和 `accept()` 的配合实现了并发处理的前置准备,而 `send()` 与 `recv()` 则封装了数据收发的高级细节。特别需要注意的是,课程专门讲解了如何优雅地通过 `close` 或 `shutdown` 断开连接,以避免资源泄漏和状态僵死。

除了 TCP 的可靠性,UDP 编程同样占据重要比重。课程通过多个片段对比了 UDP 无连接、不可靠但高效的特性,适用于音视频传输或对实时性要求极高的场景。此外,域套接字(Unix Domain Socket)的介绍拓宽了本地进程间通信(IPC)的视野,而广播与组播技术则展示了网络编程在更广阔范围内的应用潜力。

面对高并发挑战,课程最后集中探讨了三种经典的并发模型:多线程、多进程以及多路 IO 复用(如 select/poll/epoll)。通过对比它们在资源占用、上下文切换开销及扩展性上的差异,帮助你根据实际业务场景选择最合适的架构方案。

学习本章时,建议不要止步于“跑通代码”。每一次调用 bind 失败、每一个字节序错误、每一处连接断开时的时序问题,都是深化理解的绝佳机会。结合第 8 章至第 23 章的 TCP 实现与后续的多客户并发处理,你将建立起一套完整的网络服务开发思维体系,为后续构建高性能服务端程序打下坚实基础。

课程目录

1 网络编程概述 (21:09)
2 回顾TCP、IP协议族 (20:46)
3 回顾局域网通信 (11:51)
4 回顾跨网通信1 (27:07)
5 回顾跨网通信 2 (14:31)
6 TCP协议的特点 1 (23:06)
7 TCP协议的特点 2 (11:07)
8 TCP编程模型 (21:09)
9 socket函数 之 domian参数 1 (18:01)
10 socket函数 之 domian参数 2 (08:14)
11 socket函数 之 type和protocol参数 (23:26)
12 bind函数1 (26:54)
13 bind函数2 (09:07)
14 htons函数 与 端口号 (25:34)
15 inet_addr函数 (15:34)
16 listen函数 (14:51)
17 accept函数 (26:31)
18 send发送数据 (21:36)
19 recv函数 (17:39)
20 调用close或者shutdown 断开连接 (16:17)
21 TCP客户端程序的实现 1 (21:10)
22 TCP客户端程序实现 2 (20:36)
23 TCP通信的具体过程 (27:08)
24 UDP通信 1 (11:00)
25 UDP通信 2 (24:20)
26 UDP通信 3 (24:42)
27 UDP通信4 (16:59)
28 UDP通信 5 (13:03)
29 域套接字 1 (32:21)
30 域套接字 2 (34:16)
31 广播 组播 (10:43)
32 多线程实现多客户 (35:07)
33 多进程实现 多客户 (31:29)
34 多路io实现 多客户 (14:39)