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 客户端
相关推荐
JaneConan11 小时前
鸿蒙 ArkUI 深水区:@Watch 和 @Observed,状态变了「自动跑」+ 嵌套对象「深层重绘」
开发语言·后端·ui·harmonyos
数据知道12 小时前
邮件安全实战:SPF/DKIM/DMARC 配置与钓鱼绕过
网络·安全·web安全·网络安全·邮件安全
赤水无泪12 小时前
qt中图标、名称的设置方式
开发语言·qt
王莎莎-MinerU12 小时前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
开发语言·网络·人工智能·深度学习·pdf·c#·php
橘子海全栈攻城狮12 小时前
【最新源码】基于SpringBoot + Vue的超市管理系统的设计与实现D002
java·开发语言·vue.js·spring boot·后端·spring
在水一缸12 小时前
深入浅出 Catch2:现代 C++ 测试框架的优雅实践
开发语言·c++·单元测试·log4j·测试框架·catch2
AC赳赳老秦12 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
Chloeis Syntax12 小时前
JAVAEE初阶 --- 构造HTTP请求
网络·网络协议·http·postman
-银雾鸢尾-12 小时前
C#中Object类内的方法
开发语言·c#
砚凝霜12 小时前
软考网络工程师|第 1 章 计算机网络基础 完整备考笔记
网络·笔记·计算机网络