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 客户端
相关推荐
阿里嘎多学长43 分钟前
2026-04-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
m0_613856292 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
叶小鸡2 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
Johnstons2 小时前
Wireshark ExpertInfo是什么?一文讲透异常分级、适用场景、和传统抓包阅读的区别与排查标准
网络·测试工具·wireshark·es
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
alxraves3 小时前
医疗器械软件注册指导原则注意事项
网络·安全·健康医疗·制造
我的xiaodoujiao3 小时前
API 接口自动化测试详细图文教程学习系列16--项目实战演练3
python·学习·测试工具·pytest
ID_180079054733 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
时空系3 小时前
第10篇:继承扩展——面向对象编程进阶 python中文编程
开发语言·python·ai编程
CHANG_THE_WORLD4 小时前
python 批量终止进程exe
开发语言·python