阿杰 👍
你想学 Socket 网络编程,我帮你从 概念 → 基础 → 进阶 → 实战 系统整理一份学习路线,并附带 Python 示例。
🌐 Socket 网络编程学习路线
一、基础概念
- 什么是 Socket?
- Socket = IP 地址 + 端口号
- 是应用层与传输层(TCP/UDP)之间的桥梁
- 通信过程:
客户端 Socket <——TCP/UDP——> 服务端 Socket
- 常见协议
- TCP(Transmission Control Protocol)
- 面向连接(可靠)
- 适合:文件传输、HTTP、聊天程序
- UDP(User Datagram Protocol)
- 无连接(不可靠但快)
- 适合:视频流、实时游戏、语音通话
- TCP(Transmission Control Protocol)
二、Python Socket 基础
Python 提供 socket
标准库,常用流程:
服务端(TCP)
import socket
# 1. 创建 socket 对象 (IPv4, TCP)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 绑定 IP 和端口
server.bind(('127.0.0.1', 8888))
# 3. 开始监听
server.listen(5)
print("服务端启动,等待客户端连接...")
while True:
conn, addr = server.accept() # 等待连接
print("连接来自:", addr)
data = conn.recv(1024).decode('utf-8') # 接收数据
print("收到:", data)
conn.send("Hello Client!".encode('utf-8')) # 回复
conn.close()
客户端(TCP)
import socket
# 1. 创建 socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 连接服务端
client.connect(('127.0.0.1', 8888))
# 3. 发送数据
client.send("Hello Server!".encode('utf-8'))
# 4. 接收回复
data = client.recv(1024).decode('utf-8')
print("收到回复:", data)
client.close()
三、UDP 示例
服务端(UDP)
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 9999))
print("UDP 服务端启动...")
while True:
data, addr = server.recvfrom(1024)
print("收到:", data.decode(), "来自:", addr)
server.sendto("ACK".encode(), addr)
客户端(UDP)
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto("你好 UDP!".encode(), ('127.0.0.1', 9999))
data, _ = client.recvfrom(1024)
print("服务端回复:", data.decode())
client.close()
四、进阶内容
- 多线程 / 多进程 / 异步
threading
:多客户端连接asyncio
+asyncio.start_server()
:高并发selectors
:IO 多路复用
- 协议应用
- HTTP 协议解析
- WebSocket(实时通信)
- 安全性
- SSL/TLS 加密(
ssl
模块) - 防止粘包/半包问题(分隔符、固定长度、报文头)
- SSL/TLS 加密(
五、实战项目建议
- 局域网聊天室(TCP + 多线程)
- 文件传输工具(断点续传)
- 简易 HTTP 服务器(Socket + HTTP 协议解析)
- 实时游戏服务器(UDP + 状态同步)
好嘞阿杰!我已经给你准备好一套可直接运行的 多人聊天室(Socket + 多线程):
- 服务器:
server.py
- 客户端:
client.py
怎么跑
- 启动服务器(本机或云主机)
python server.py --host 0.0.0.0 --port 5000
- 启动客户端(同机或远程机器均可)
python client.py --host 服务器IP --port 5000 --nick Alice
再开一个终端,换个昵称再连一次,就能多人聊天了。
支持的命令
/nick 新昵称
修改昵称/list
查看在线用户/quit
退出/help
帮助
功能说明
- UTF-8 文本、换行分包(避免粘包困扰常见场景)
- 多线程读写,支持多客户端并发
- 断线清理与广播通知(加入/退出都会提示)
SO_REUSEADDR
、空闲超时、异常防护
如果你想要 文件传输、聊天记录持久化、TLS 加密 或 WebSocket 版本(浏览器可用),告诉我,我直接在这套代码上给你升级。
发表回复