Python做服务器端和客户端,核心是理解Socket通信模型,再用HTTP、WebSocket等高层协议做工程化封装:服务端负责监听、接收、处理、返回,客户端负责发起连接、发送请求、读取响应。 入门先用标准库socket,做Web接口再上FastAPI、Flask或Django,客户端则用requests、httpx或aiohttp。
Python服务器端和客户端有什么区别
把服务器端想成营业厅,客户端就是来办事的人,服务器端先开门,绑定IP和端口,坐在那里等连接,客户端主动拨号,连上之后才能说话。
- 启动顺序不同:服务端先运行,客户端后运行,服务端没起来,客户端会报连接拒绝。
- 连接方向不同:服务端被动等待accept,客户端主动connect。
- 生命周期不同:服务端通常长期运行,客户端完成一次请求就可以关闭。
- 关注点不同:服务端更关心并发、超时、安全、资源释放;客户端更关心重试、编码、响应解析。
| 对比项 | 服务器端 | 客户端 |
|---|---|---|
| 典型动作 | bind、listen、accept | connect、send、recv |
| IP绑定 | 常绑0.0.0.0或内网IP | 连服务端具体IP |
| 常用库 | socket、asyncio、FastAPI | requests、httpx、socket |
| 常见问题 | 端口占用、并发阻塞 | 连接超时、数据粘包 |
Python socket编程实现客户端和服务器步骤
TCP是多数入门场景的首选,它可靠、有序,适合文件传输、聊天、远程命令,下面是最小可运行流程。
服务端server.py:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('127.0.0.1', 8888))
s.listen(5)
print('服务端已启动,等待连接')
conn, addr = s.accept()
print('来自', addr)
data = conn.recv(1024)
print('收到:', data.decode())
conn.sendall('已收到'.encode())
conn.close()
s.close()
客户端client.py:
import socket
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect(('127.0.0.1', 8888))
c.sendall('hello server'.encode())
print(c.recv(1024).decode())
c.close()
运行方式:
- 打开第一个终端,执行
python server.py。 - 打开第二个终端,执行
python client.py。 - 观察服务端打印客户端地址,客户端打印“已收到”。
这里有几个高频坑,端口被占用就换8888为8890,或用SO_REUSEADDR快速复用,发送字符串要encode(),接收后要decode()。recv(1024)不保证一次收完,大文件必须循环读取。
局域网文件传输Python客户端服务器怎么做
这个场景很实用:同一WiFi下,手机或另一台电脑把文件传到你的Python服务端,服务端绑定0.0.0,客户端连接服务端的局域网IP,比如168.1.10。
简单协议可以这样设计:
- 客户端先发送“文件名|文件大小”的头部。
- 服务端解析头部,准备接收指定字节数。
- 客户端再循环发送文件内容。
- 服务端按大小循环写入,直到收满为止。
关键代码片段:
import struct
name = 'demo.txt'.encode()
size = 10240
header = struct.pack('!I', len(name)) + name + struct.pack('!Q', size)
c.sendall(header)
服务端先读4字节文件名长度,再读文件名,再读8字节文件大小,收文件时用remaining = size,每次recv(min(4096, remaining)),写文件后减少remaining,这样做能避免粘包,也不会把两个文件混在一起。
如果是聊天、指令控制,消息短,可以约定“一行一条”,用n分割,要是并发连接多,别用单线程accept硬扛,换socketserver.ThreadingTCPServer或asyncio.start_server。
Python做服务器端需要学哪些库
标准库是地基,框架是装修,学习顺序建议从下往上。
- socket:理解TCP/UDP、IP、端口、阻塞。
- socketserver:快速做多线程TCP服务端。
- selectors:单线程管理多个连接,理解IO多路复用。
- asyncio:异步IO,适合高并发长连接。
- http.server:临时文件服务,命令
python -m http.server 8000即可。 - Flask、FastAPI、Django:做HTTP API和网站后端。
- websockets、aiohttp:做实时通信和异步客户端。
- requests、httpx:写HTTP客户端,简单直接。
业内专家指出,理解TCP三次握手和HTTP请求响应模型,比死记框架API更重要,先能用socket跑通一问一答,再学FastAPI,会顺很多。
Python服务器端和客户端通信实例:HTTP与Socket怎么选
Socket像对讲机,HTTP像寄快递,对讲机实时、双向、需要自己定协议;快递格式标准、生态成熟、适合接口调用。
FastAPI服务端示例:
from fastapi import FastAPI
app = FastAPI()
@app.get('/ping')
def ping():
return {'msg': 'pong'}
运行:
uvicorn main:app --host 0.0.0.0 --port 8000
requests客户端示例:
import requests
r = requests.get('http://127.0.0.1:8000/ping', timeout=5)
print(r.json())
选择建议:
- 做后台接口、前后端分离、微服务,优先HTTP框架。
- 做实时聊天、游戏同步、推送,优先WebSocket或原始Socket。
- 做内部小工具,标准库socket就够。
- 做公网服务,必须考虑HTTPS、鉴权、限流、日志。
行业共识认为,同步阻塞代码适合教学和内部工具,异步框架更适合高并发接口,选型不看流行度,看连接数量、实时要求和团队维护成本。
零基础学Python网络编程要多少钱
学习成本可以很低,也可以很高,免费路线包括Python官方文档、开源项目、公共视频课程,付费路线从几十元的入门课到上万元的就业班都有,价格差异主要来自服务、项目、答疑和就业辅导。
如果只是做课程设计、局域网工具,免费资料加动手实践基本够用,想转后端开发,重点不是买多贵的课,而是把socket、HTTP、数据库、部署串起来,可以按这个路径走:
- 两周写TCP回声服务端和客户端。
- 一周写局域网文件传输。
- 两周用FastAPI写CRUD接口,并用requests测试。
- 一周学Docker和Nginx,把服务跑在云服务器。
- 持续做项目,把代码放到GitHub。
北京Python后端开发常用哪些框架
在北京找Python后端岗位,招聘信息里常见Django、FastAPI、Flask、Tornado、Celery、SQLAlchemy,Django适合快速做完整业务系统,FastAPI适合现代异步API,Flask适合轻量服务,地域不是决定因素,项目经验才是,会写接口不稀奇,能处理并发、排查内存泄漏、做性能压测,才是加分项。
据统计,近年来Python在后端、自动化和数据方向的岗位需求保持稳定,真正拉开差距的,是能否把服务器端和客户端通信讲清楚,并写出可维护代码。
Python服务器端和客户端常见问题Q&A
Python做服务器端必须用socket吗?
不一定,socket是底层基石,但业务开发更常用HTTP框架,FastAPI、Django负责服务端,requests、httpx负责客户端,只有自定义协议、实时通信、教学演示时,才需要直接写socket。
Python服务器端和客户端如何跨电脑运行?
服务端绑定0.0.0,客户端连接服务端的局域网IP,先确认两台电脑在同一网段,再检查防火墙是否放行端口,Linux可用ss -lntp查看监听,Windows可用netstat -ano,连接失败时,先用ping测网络,再用telnet IP 端口测端口。
Python socket编程实现客户端和服务器步骤中,粘包怎么处理?
粘包不是TCP故障,而是TCP把多次发送合并成一次接收,常见做法是加长度头:先发固定字节表示消息长度,再发消息正文,接收方先读长度头,再按长度循环读取,UDP没有粘包,但会丢包、乱序,适合实时性高、允许丢数据的场景。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/676409.html





