📄 一句话概括
服务器端套接字四步:socket 造、bind 报端口、listen 挂营业牌、accept 接客——客到之后复制一个新套接字专门陪客,原套接字继续监听。
📝 本节和前面几节的关系
6.1.2 说了要多任务;本篇看多任务的具体机制——套接字怎么管理。
一、四个函数
socket():造一个套接字(与客户端相同); bind():报上端口号(如 80)——这是服务器的身份证; listen():挂上【营业中】的牌子开始等; accept():有连接来就接受,返回新套接字。
二、复制套接字
accept 后复制出一个新套接字专门陪这位客, 原来的继续监听等下一批—— 这就回答了【一人等客怎么不堵门】。
三、动手 Demo:服务器端的套接字流程
与客户端(socket->connect)对仗的四个函数:
for s in ['socket() 造一个套接字',
bind() 报上端口号(80)',
listen() 挂上【营业中】的牌子等客',
accept() 有客来了,接进来']:
print(s)
print()
print('客一到,再复制一个套接字专门陪这位客')
实跑输出:
--------------------------------------------------------------------
服务器端的套接字流程
--------------------------------------------------------------------
与客户端(socket->connect)对仗的四个函数:
socket() 造一个套接字
bind() 报上端口号(80)
listen() 挂上【营业中】的牌子等客
accept() 有客来了,接进来
客一到,再**复制一个套接字**专门陪这位客,
原来的继续在门口等下一批。
对照 1.4.2~1.4.4 的客户端四阶段—— 两边的函数一一对应,pipe 才接得起来。
30 秒实验
- 写出服务器与客户端的函数调用序列对照表。
- 想想为什么不复制套接字会发生什么。
- 查查 Python socket 编程里 accept 的返回值。
常见误区
- 以为服务器一个套接字包办所有客人——accept 会复制新的。
- 以为 bind 是客户端的事——端口号是服务器的门牌。
自测三问(点开对答案)
1. 服务器端四步函数? —— socket、bind、listen、accept。 2. accept 返回什么? —— 专门陪这位客的新套接字。 3. bind 的作用? —— 把端口号报给协议栈。- ☐ 下一节(6.2.1 网卡将接收到的信号转换成数字信息)
相关笔记
- 创建套接字阶段 — 客户端侧的对应
- 连接操作的实际过程 — 握手时两边的动作
- 🔌 网络是怎样连接的 · 索引