一、TCP/IP核心概念
- 协议分层:
-
- IP层:负责主机寻址和路由(非可靠传输)
- TCP层:在IP基础上建立可靠连接,保证数据顺序和完整性
- 关键特性:
-
- 三次握手建立连接
- 流量控制与拥塞避免
- 全双工字节流通信
二、Python socket 模块精要
import socket
# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # AF_INET: IPv4, SOCK_STREAM: TCP
三、实战示例:双端通信代码
服务端代码 (server.py):
import socket
HOST = '127.0.0.1' # 本地回环地址
PORT = 65432 # 监听端口 (>1024)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT)) # 绑定地址端口
s.listen() # 开启监听
conn, addr = s.accept() # 阻塞等待连接
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024) # 接收数据(最多1024字节)
if not data: break # 连接关闭
conn.sendall(data) # 回传数据
客户端代码 (client.py):
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT)) # 连接服务器
s.sendall(b'Hello, TCP World!') # 发送字节数据
data = s.recv(1024) # 接收响应
print('Received:', repr(data)) # 输出:b'Hello, TCP World!'
四、运行验证
- 启动服务端:
python server.py - 启动客户端:
python client.py - 观察终端输出:
-
- 服务端显示:
Connected by ('127.0.0.1', 12345) - 客户端显示:
Received: b'Hello, TCP World!'
- 服务端显示:
核心要点总结
|
组件 |
作用 |
关键方法 |
|
Server Socket |
监听连接请求 |
|
|
Client Socket |
发起连接 |
|
|
数据传输 |
双向字节流通信 |
|
注意:实际应用中需添加异常处理(如try-except)、设置超时(settimeout())及多线程/异步处理并发连接。通过SO_REUSEADDR选项可解决端口占用问题(s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1))。
此示例揭示了Python TCP通信的本质流程。扩展方向包括实现HTTP服务器、构建自定义协议或结合asyncio实现高性能异步通信——掌握这些基础,网络编程大门已向你敞开。
1066

被折叠的 条评论
为什么被折叠?



