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 客户端
相关推荐
一次旅行几秒前
DeepSeek‑V4.1‑Flash‑1017完整解读:模型升级+Search/Fetch搜索API开放,Agent开发者要注意哪些坑
前端·网络·人工智能
.Bryce.2 分钟前
你了解 Blackboard(黑板系统)吗?听说过基于黑板系统实现的智能体吗?
java·网络·gpt·php·agent·codex·黑板系统
MasonYyp15 分钟前
声音转文字的模型
python
银河技术16 分钟前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
GIS数据转换器2 小时前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
草莓熊Lotso2 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Wang's Blog7 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
Chenyu_3107 小时前
DPDK、TC 和 XDP:Linux 高性能网络到底在优化什么
linux·服务器·网络·缓存
信誓旦旦的程序猿8 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河8 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven