MCPcopy Create free account
hub / github.com/Louisym/MiniCC / lesson_3_binding

Function lesson_3_binding

tutorials/14b_networking_for_engineers.py:212–278  ·  view source on GitHub ↗

当你启动一个服务器时,你要决定"谁能连进来"。 这取决于你绑定到哪个地址。

()

Source from the content-addressed store, hash-verified

210# ============================================================
211
212def lesson_3_binding():
213 """
214 当你启动一个服务器时,你要决定"谁能连进来"
215 这取决于你绑定到哪个地址。
216 """
217 print("\n" + "=" * 60)
218 print("第三课: 监听地址——谁能连进来?")
219 print("=" * 60)
220
221 print("""
222 ┌──────────────────────────────────────────────────────────┐
223 │ 你的电脑 │
224 │ │
225 │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
226 │ │ loopback │ │ WiFi 网卡 │ │ 以太网卡 │ │
227 │ │ 127.0.0.1 │ │ 192.168.1.5 │ │ 10.0.0.100 │ │
228 │ └──────┬──────┘ └──────┬──────┘ └──────┬──────────┘ │
229 │ │ │ │ │
230 │ ▼ ▼ ▼ │
231 │ ┌─────────────────────────────────────────────────────┐│
232 │ │ 操作系统网络栈 ││
233 │ │ 服务器绑定到哪个地址,决定接受谁的连接: ││
234 │ │ ││
235 │ │ bind("127.0.0.1", 8080) ││
236 │ │ → 只接受本机连接(最安全) ││
237 │ │ → 外面的电脑连不上你 ││
238 │ │ ││
239 │ │ bind("192.168.1.5", 8080) ││
240 │ │ → 只接受通过 WiFi 来的连接 ││
241 │ │ ││
242 │ │ bind("0.0.0.0", 8080) ││
243 │ │ → 接受所有网卡的连接(最开放) ││
244 │ │ → 局域网里的其他设备都能连上你 ││
245 │ └─────────────────────────────────────────────────────┘│
246 └──────────────────────────────────────────────────────────┘
247 """)
248
249 # 实际演示不同绑定的效果
250 print(" 实际测试:")
251
252 # 绑定到 127.0.0.1
253 s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
254 s1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
255 s1.bind(("127.0.0.1", 0))
256 port1 = s1.getsockname()[1]
257 print(f" bind('127.0.0.1', {port1}) → 只有本机能连")
258 s1.close()
259
260 # 绑定到 0.0.0.0
261 s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
262 s2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
263 s2.bind(("0.0.0.0", 0))
264 port2 = s2.getsockname()[1]
265 print(f" bind('0.0.0.0', {port2}) → 任何人都能连")
266 s2.close()
267
268 print(f"""
269 开发时常见场景:

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected