Python网络编程

Python 网络编程的核心是使用 socket(套接字) 进行跨设备通信,主要分为 TCP(可靠连接)UDP(无连接) 底层编程,以及 HTTP / 异步 / 高级协议 上层开发。下面从基础到实战完整讲解。


一、基础概念

1. 三要素

  • IP:设备地址(IPv4/IPv6)
  • 端口:进程标识(0~65535,1024+ 可用)
  • 协议:TCP / UDP

2. socket 模块(内置)

python

运行

复制代码
import socket

# TCP(可靠、面向连接)
sock_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# UDP(快速、无连接)
sock_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

3. 编码要求

  • 网络只传 字节(bytes)
  • 字符串必须:.encode('utf-8')
  • 接收后:.decode('utf-8')

二、TCP 编程(重点)

特点:面向连接、可靠、有序、流式传输

1. TCP 服务器

python

运行

复制代码
import socket

# 1. 创建socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 绑定IP+端口
server.bind(('127.0.0.1', 8888))

# 3. 监听(最大连接数)
server.listen(5)
print("TCP服务器已启动,等待连接...")

# 4. 接受连接(阻塞)
client_sock, addr = server.accept()
print(f"客户端 {addr} 已连接")

# 5. 收发数据
while True:
    data = client_sock.recv(1024)  # 接收
    if not data:
        break
    print(f"收到:{data.decode()}")
    client_sock.send(b"OK: " + data)  # 回复

# 6. 关闭
client_sock.close()
server.close()

2. TCP 客户端

python

运行

复制代码
import socket

# 1. 创建socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 连接服务器
client.connect(('127.0.0.1', 8888))

# 3. 收发
client.send(b"Hello TCP Server")
resp = client.recv(1024)
print("服务器回复:", resp.decode())

# 4. 关闭
client.close()

三、UDP 编程

特点:无连接、不可靠、速度快

1. UDP 服务器

python

运行

复制代码
import socket

udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_server.bind(('127.0.0.1', 9999))
print("UDP服务器已启动")

while True:
    data, addr = udp_server.recvfrom(1024)
    print(f"{addr}: {data.decode()}")
    udp_server.sendto(b"UDP OK", addr)

2. UDP 客户端

python

运行

复制代码
import socket

udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_client.sendto(b"Hello UDP", ('127.0.0.1', 9999))
data, addr = udp_client.recvfrom(1024)
print(data.decode())
udp_client.close()

四、HTTP 编程(常用)

1. requests(第三方,最常用)

bash

运行

复制代码
pip install requests

python

运行

复制代码
import requests

# GET
r = requests.get("https://httpbin.org/get")
print(r.status_code)
print(r.json())

# POST
r = requests.post("https://httpbin.org/post", data={"key": "val"})

2. http.server(内置简易服务器)

python

运行

复制代码
from http.server import HTTPServer, BaseHTTPRequestHandler

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b"<h1>Hello Python HTTP</h1>")

server = HTTPServer(('127.0.0.1', 8000), Handler)
server.serve_forever()

五、异步网络(asyncio)

高并发场景(单线程处理多连接)

python

运行

复制代码
import asyncio

async def handle(reader, writer):
    data = await reader.read(100)
    addr = writer.get_extra_info('peername')
    print(f"{addr}: {data.decode()}")
    writer.write(b"Async: " + data)
    await writer.drain()
    writer.close()

async def main():
    server = await asyncio.start_server(handle, '127.0.0.1', 7777)
    await server.serve_forever()

asyncio.run(main())

六、常见问题与技巧

1. TCP 粘包 / 拆包

  • 原因:TCP 是字节流,无消息边界
  • 解决:
    • 固定长度
    • 分隔符(如 \n)
    • 消息头 + 长度

2. 端口占用

bash

运行

复制代码
# Windows
netstat -ano | findstr :8888
# Linux/macOS
lsof -i :8888

3. 阻塞与非阻塞

python

运行

复制代码
sock.setblocking(False)  # 非阻塞

4. 常用库

  • socket:底层 TCP/UDP
  • requests:HTTP 客户端
  • aiohttp:异步 HTTP
  • websockets:WebSocket
  • scrapy:爬虫框架

七、学习路线

  1. 掌握 TCP/UDP socket 基础
  2. 熟练 requests/http
  3. 学习 asyncio 异步
  4. 实战:聊天服务器、文件传输、API 客户端
相关推荐
轩情吖10 分钟前
Python基础知识点完整总结
python·字符串·编程语言·函数·列表·元组·字典
xiancai_xianyu13 分钟前
想把数据模型一次建完美再上AI?会一直卡在建模里
开发语言·人工智能·php·数据模型·语义层·本体建模·企业知识网络
数据知道23 分钟前
YARA 规则编写实战——从样本到检测规则
网络·安全·网络安全
志栋智能27 分钟前
安全超自动化:实现安全策略动态调整的保障
网络·安全·自动化
(Charon)28 分钟前
【C++】网络缓冲区设计(二):Ring Buffer环形缓冲区、head/tail与跨界读写
开发语言·c++
青 春 记 忆30 分钟前
零基础入门python69:为 FastAPI 项目构建可复现 Docker 镜像
python·fastapi·后端开发
<花开花落>32 分钟前
Python 项目迁移到 uv:经验小结与可复用工作流
python·uv
databook35 分钟前
正态分布撒谎时:用柯西分布捕捉生活中的“黑天鹅”
python·数据挖掘·数据分析
Java后端的Ai之路38 分钟前
LangChain Deep Agents 从入门到企业实战
开发语言·人工智能·python·langchain·deepagents
2601_9623815839 分钟前
Mac和Windows,哪种电脑适合新手学Python|数智码力分享
windows·python·mac·编程环境·学习入门