1. Python网络编程基础概念网络编程是现代软件开发中不可或缺的核心技能之一。Python凭借其简洁的语法和丰富的标准库成为网络编程的理想选择。Python中的网络编程主要涉及两个层面低级别的socket编程和高级别的网络协议封装。1.1 Socket编程基础Socket是网络通信的基本构建块可以理解为网络通信的端点。在Python中我们使用socket模块来创建和管理socket连接。一个典型的socket通信流程包括以下步骤创建socket对象绑定IP和端口服务端监听连接服务端建立连接发送/接收数据关闭连接import socket # 创建TCP socket server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((localhost, 8080)) server_socket.listen(1) print(等待客户端连接...) client_socket, addr server_socket.accept() print(f接收到来自 {addr} 的连接) data client_socket.recv(1024) print(f接收到数据: {data.decode()}) client_socket.send(Hello, Client!.encode()) client_socket.close() server_socket.close()注意在实际应用中务必处理socket操作可能抛出的异常如连接超时、连接重置等。1.2 网络协议分层理解理解网络协议栈对于网络编程至关重要。OSI七层模型和TCP/IP四层模型是网络通信的基础框架应用层HTTP、FTP、SMTP等协议传输层TCP可靠连接和UDP无连接网络层IP协议链路层以太网、WiFi等物理连接Python的标准库提供了对不同层级协议的支持http/httpshttp.client, urllib.requestftpftplibsmtp/pop3/imapsmtplib, poplib, imaplibtcp/udpsocket模块2. Python高级网络编程技术2.1 多线程与异步网络编程当处理多个客户端连接时简单的单线程模型无法满足需求。Python提供了多种并发处理方案多线程服务器from threading import Thread def handle_client(client_socket): request client_socket.recv(1024) print(fReceived: {request}) client_socket.send(ACK!.encode()) client_socket.close() server socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((0.0.0.0, 9999)) server.listen(5) while True: client, addr server.accept() print(fAccepted connection from {addr[0]}:{addr[1]}) client_handler Thread(targethandle_client, args(client,)) client_handler.start()异步I/O与asyncioPython 3.4引入的asyncio模块为网络编程提供了更高效的解决方案import asyncio async def handle_echo(reader, writer): data await reader.read(100) message data.decode() addr writer.get_extra_info(peername) print(fReceived {message} from {addr}) writer.write(data) await writer.drain() writer.close() async def main(): server await asyncio.start_server( handle_echo, 127.0.0.1, 8888) async with server: await server.serve_forever() asyncio.run(main())2.2 高级Socket选项与性能优化Socket选项设置# 设置socket选项示例 sock socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 地址重用 sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) # 禁用Nagle算法缓冲区大小调整# 调整接收缓冲区大小 sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 8192) # 8KB接收缓冲区超时设置sock.settimeout(5.0) # 设置5秒超时 try: data sock.recv(1024) except socket.timeout: print(接收数据超时)3. 常见网络协议实现3.1 HTTP客户端与服务端使用http.server创建简单HTTP服务器from http.server import HTTPServer, BaseHTTPRequestHandler class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() self.wfile.write(bHello, world!) httpd HTTPServer((localhost, 8000), SimpleHTTPRequestHandler) httpd.serve_forever()使用requests库作为HTTP客户端import requests # GET请求 response requests.get(https://api.github.com/events) print(response.json()) # POST请求 payload {key1: value1, key2: value2} response requests.post(https://httpbin.org/post, datapayload) print(response.text)3.2 WebSocket实现WebSocket提供了全双工通信能力适合实时应用# 服务端示例使用websockets库 import asyncio import websockets async def echo(websocket, path): async for message in websocket: await websocket.send(f收到消息: {message}) start_server websockets.serve(echo, localhost, 8765) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() # 客户端示例 async def client(): async with websockets.connect(ws://localhost:8765) as websocket: await websocket.send(Hello, Server!) response await websocket.recv() print(response) asyncio.get_event_loop().run_until_complete(client())4. 网络安全与性能考虑4.1 SSL/TLS加密通信# SSL服务器示例 import ssl context ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) context.load_cert_chain(certfileserver.crt, keyfileserver.key) with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.bind((0.0.0.0, 8443)) sock.listen(5) with context.wrap_socket(sock, server_sideTrue) as ssock: conn, addr ssock.accept() data conn.recv(1024) print(data.decode())4.2 连接池管理对于高频网络请求使用连接池可以显著提升性能from urllib3 import PoolManager http PoolManager(num_pools5) response http.request(GET, http://example.com/) print(response.status) print(response.data)4.3 性能监控与调优使用cProfile分析网络程序性能import cProfile def network_operation(): # 模拟网络操作 import time time.sleep(0.1) cProfile.run(network_operation())5. 实战项目构建简易聊天室5.1 服务端实现import socket import threading clients [] def broadcast(message, senderNone): for client in clients: if client ! sender: try: client.send(message.encode(utf-8)) except: clients.remove(client) def handle_client(client_socket): while True: try: message client_socket.recv(1024).decode(utf-8) if not message: break broadcast(message, client_socket) except: clients.remove(client_socket) client_socket.close() break def start_server(): server socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((0.0.0.0, 5555)) server.listen(5) print(服务器启动等待连接...) while True: client, addr server.accept() print(f新连接来自 {addr}) clients.append(client) thread threading.Thread(targethandle_client, args(client,)) thread.start() if __name__ __main__: start_server()5.2 客户端实现import socket import threading def receive_messages(client_socket): while True: try: message client_socket.recv(1024).decode(utf-8) print(message) except: print(与服务器的连接已断开) client_socket.close() break def start_client(): nickname input(请输入你的昵称: ) client socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((localhost, 5555)) receive_thread threading.Thread(targetreceive_messages, args(client,)) receive_thread.start() while True: message input() if message.lower() quit: client.close() break full_message f{nickname}: {message} client.send(full_message.encode(utf-8)) if __name__ __main__: start_client()6. 常见问题与调试技巧6.1 连接问题排查连接被拒绝检查服务端是否运行检查防火墙设置确认端口是否正确连接超时检查网络连通性增加超时时间检查服务端负载地址已在使用使用SO_REUSEADDR选项查找并终止占用端口的进程6.2 性能问题优化使用select/poll/epoll处理大量连接import select inputs [server_socket] outputs [] while inputs: readable, writable, exceptional select.select(inputs, outputs, inputs) for s in readable: if s is server_socket: client, addr s.accept() inputs.append(client) else: data s.recv(1024) if data: s.send(data) else: inputs.remove(s) s.close()缓冲区大小调整根据网络条件调整SO_RCVBUF和SO_SNDBUF大数据传输考虑分片处理协议优化使用二进制协议替代文本协议实现压缩传输考虑使用更高效的序列化格式如Protocol Buffers6.3 编码与解码问题网络通信中常见的数据编码问题# 发送数据前编码 data 你好世界.encode(utf-8) sock.send(data) # 接收数据后解码 received sock.recv(1024).decode(utf-8)重要提示始终明确指定编码格式避免不同平台默认编码不同导致的问题。对于二进制数据使用struct模块处理。7. 现代Python网络编程趋势7.1 异步HTTP客户端import aiohttp import asyncio async def fetch(session, url): async with session.get(url) as response: return await response.text() async def main(): async with aiohttp.ClientSession() as session: html await fetch(session, http://python.org) print(html[:200]) asyncio.run(main())7.2 gRPC与Protocol BuffersgRPC是Google开发的高性能RPC框架定义服务接口.proto文件生成客户端和服务端代码实现服务逻辑syntax proto3; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name 1; } message HelloReply { string message 1; }7.3 Web框架中的网络特性现代Python Web框架如FastAPI内置了高性能网络组件from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app FastAPI() app.add_middleware( CORSMiddleware, allow_origins[*], allow_credentialsTrue, allow_methods[*], allow_headers[*], ) app.get(/) async def root(): return {message: Hello World}8. 网络编程最佳实践资源管理始终使用with语句或try/finally确保socket关闭及时释放不再使用的连接错误处理捕获并处理所有可能的网络异常实现重试机制处理临时性故障日志记录记录关键网络事件和错误使用结构化日志便于分析测试策略使用unittest.mock模拟网络调用实现集成测试验证端到端通信考虑网络延迟和丢包情况的测试安全考虑验证输入数据防止注入攻击使用TLS加密敏感通信实现适当的认证和授权机制# 资源管理示例 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((example.com, 80)) s.sendall(bGET / HTTP/1.1\r\nHost: example.com\r\n\r\n) data s.recv(1024) print(data.decode())
企业数字化 ERP 产品动态
相关推荐
清华国产Sora模型实测:文生视频、提示词工程与长镜头能力全解析 深夜一点多,我被一个视频链接拉住了。画面里一只水母在深海光柱中慢慢展开触手,每根丝状物都清清楚楚,我第一反应是OpenAI Sora官方又放新样片了。结果点开评论区才反应过来,这是清华团队的国产视频生成模型放出的demo。那半小时里… · 2026/11/3 15:50:46
后厨里的AI:一文读懂机器学习、神经网络与大模型等十大概念 我一直觉得,跟非技术朋友解释AI概念,最难的不是术语本身,而是让人脑子里没有画面。机器学习、神经网络、深度学习、大模型、AI Agent——这些词放在PPT上大家点头,落到真实世界里就飘了。上个月我给我们这边一家连锁餐饮集团的运营… · 2026/11/4 23:51:10
粤十数智港股冲刺:生鲜供应链数字化财务解析 1. 粤十数智港股冲刺背后的财务透视 2023年第四季度,粤十数智向港交所递交招股说明书的消息引发市场广泛关注。这家成立仅三年的生鲜供应链企业,用一份"9个月营收40亿亏损17.5亿"的财务数据,向资本市场展示了生鲜数字化赛道的残酷竞… · 2026/11/3 20:06:26
青浦区低压电工证推荐怎么选?郑州报考避坑指南帮你理清 青浦区低压电工证推荐怎么选?郑州报考避坑指南帮你理清 证书过期了不知道怎么复审延期?青浦区低压电工证推荐的报考流程和复审要求你真的清楚吗?别再因为证书过期耽误工作了,今天就用一个真实案例,帮你理清青浦区低压电工证推荐的报考细节和避坑指南。… · 2026/11/12 13:22:58
电工证几年没有年审 怎么报名别踩坑 电工证几年没有年审 怎么报名别踩坑 学历不高怕报不上名?电工证几年没有年审?其实很多人在考电工证之前都有这些顾虑。我当年就是个初中毕业的务工人员,带着一肚子疑问去报名,结果发现流程远没有想象中那么复杂,但要是走错了路,确实容易耽误时间和钱。… · 2026/11/12 13:22:58
高压电工证有必要留吗通过率揭秘别再被中介忽悠了 高压电工证有必要留吗通过率揭秘别再被中介忽悠了 你是不是也遇到过这种情况:手上拿着高压电工证,想着用它找工作、换岗位,结果一打听才发现,证已经过期,复审流程又复杂,最后只能眼睁睁看着机会溜走?其实,很多人在拿到证书后,就忽略了证书的有效期和… · 2026/11/12 13:22:58
富阳电工证培训学校怎么选?郑州报考避坑指南全在这里 富阳电工证培训学校怎么选?郑州报考避坑指南全在这里 工地太忙根本没时间复习考试,你是不是也这样?每天忙得连吃饭时间都挤不出来,还想着抽空去考个电工证,生怕错过机会。别急,这篇文章就是为你量身定制的,带你了解富阳电工证培训学校怎么选,避开郑州… · 2026/11/12 13:22:58
低压电工证报名途径全攻略:官方报名入口怎么找,证书过期怎么办 低压电工证报名途径全攻略:官方报名入口怎么找,证书过期怎么办 证书过期了不知道怎么复审延期?别急,这篇文章给你讲清楚低压电工证报名途径,以及官方报名入口怎么找,让你不再被流程搞晕。特别是那些已经拿到证但快到期的朋友们,赶紧看过来!… · 2026/11/12 13:22:58
电工证的复审周期你了解多少?学历不高怕报不上名的听我说 电工证的复审周期你了解多少?学历不高怕报不上名的听我说 你是不是也这样,手里拿着电工证,担心过不了复审?其实,复审不是难题,关键是你得知道 电工证的复审周期 有多长, 良心建议… · 2026/11/12 13:21:56
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/11 19:07:25
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/11 17:14:54
电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工、焊工、高处作业人员的真实写照。尤其是像你这样刚毕业的鹤壁工程类毕业生,一边要找工作,一边要考证,时间紧张,复习效率低。但你可能不知… · 2026/11/12 0:00:56
新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 实操考试心里没底怕挂科?你不是一个人。新乡的水利工程从业者,很多在报考电工证的时候都担心自己操作不熟练、考试不通过, 千万别踩坑 ,选对资料和方法真的能提高通过率。… · 2026/11/12 0:00:56
网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 实操考试心里没底怕挂科,这是很多准备报考【网电工证】的学员最真实的感受。尤其是在高压电工、低压电工等工种上,操作环节的容错率极低,一旦失误就可能直接被判定不合格。很多人因为担心挂科而放弃考… · 2026/11/12 0:00:56
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 4:35:34
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 4:36:01
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/11 17:15:20