当前位置: 首页 > news >正文

【Python socket模块深度解析】网络通信的核心工具

目录

    • 🌟 模块概述
      • 🧬 模块定位
      • 📦 导入方式
    • 🛠️ 核心API详解
      • 1️⃣ socket对象创建
      • 2️⃣ 关键方法速查
    • 🔌 TCP/UDP编程流程对比
      • 🚥 TCP通信流程
      • 🚀 UDP通信流程
    • 💻 实战代码示例
      • 案例1:TCP文件传输服务器
      • 案例2:UDP时间客户端
    • ⚠️ 常见错误处理
      • 1️⃣ 地址已在使用(Address already in use)
      • 2️⃣ 连接重置(Connection reset)
      • 3️⃣ 超时控制
    • 🚀 高级技巧
      • 1️⃣ 获取本机IP
      • 2️⃣ 端口扫描工具
    • 📚 学习资源推荐


🌟 模块概述

🧬 模块定位

socket模块是Python标准库中用于网络通信的核心模块,提供对BSD套接字接口的面向对象封装,支持TCP/IP、UDP等协议栈。

📦 导入方式

import socket  # 标准导入
from socket import socket, AF_INET, SOCK_STREAM  # 按需导入

🛠️ 核心API详解

1️⃣ socket对象创建

socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
  • 参数说明
    • family:地址族(默认AF_INET=IPv4,可选AF_INET6=IPv6)
    • type:套接字类型(SOCK_STREAM=TCP,SOCK_DGRAM=UDP)
    • proto:协议号(通常自动检测)
    • fileno:文件描述符(高级用法)

2️⃣ 关键方法速查

方法适用协议作用描述
bind((host, port))TCP/UDP绑定地址到套接字
listen(backlog)TCP启动监听,设置等待队列长度
accept()TCP接受客户端连接,返回(client_socket, address)
connect((host, port))TCP连接服务端
send(data)TCP发送数据
recv(bufsize)TCP接收数据
sendto(data, addr)UDP发送数据到指定地址
recvfrom(bufsize)UDP接收数据和发送方地址
close()通用关闭套接字

🔌 TCP/UDP编程流程对比

🚥 TCP通信流程

服务器
创建socket
bind绑定
listen监听
accept接受连接
recv/send数据交换
close关闭
客户端
创建socket
connect连接
send/recv数据交换
close关闭

🚀 UDP通信流程

服务端
创建socket
bind绑定
recvfrom接收数据
sendto发送响应
客户端
创建socket
sendto发送数据
recvfrom接收响应

💻 实战代码示例

案例1:TCP文件传输服务器

import socketdef tcp_file_server(filename, port=8888):with socket.socket() as s:s.bind(('', port))s.listen(1)print(f"等待连接,端口{port}...")conn, addr = s.accept()with conn, open(filename, 'wb') as f:print(f"客户端 {addr} 已连接")while True:data = conn.recv(4096)if not data: breakf.write(data)print("文件传输完成")tcp_file_server('received_file.zip')

案例2:UDP时间客户端

import socket
import timedef udp_time_client(server_ip='127.0.0.1', port=8888):with socket.socket(type=socket.SOCK_DGRAM) as s:for _ in range(3):s.sendto(b'time', (server_ip, port))data, addr = s.recvfrom(1024)print(f"服务器 {addr} 时间: {data.decode()}")time.sleep(1)udp_time_client()

⚠️ 常见错误处理

1️⃣ 地址已在使用(Address already in use)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 在bind前设置

2️⃣ 连接重置(Connection reset)

try:data = conn.recv(1024)
except ConnectionResetError:print("客户端异常断开")

3️⃣ 超时控制

s.settimeout(5.0)  # 设置5秒超时
try:data = s.recv(1024)
except socket.timeout:print("接收超时")

🚀 高级技巧

1️⃣ 获取本机IP

def get_local_ip():s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)try:s.connect(('8.8.8.8', 80))  # 连接公共DNSreturn s.getsockname()[0]finally:s.close()print("本机IP:", get_local_ip())

2️⃣ 端口扫描工具

def port_scan(target_ip, start=70, end=100):open_ports = []for port in range(start, end+1):with socket.socket() as s:s.settimeout(0.5)result = s.connect_ex((target_ip, port))if result == 0:open_ports.append(port)return open_portsprint("开放端口:", port_scan('127.0.0.1', 70, 100))

📚 学习资源推荐

  1. 官方文档:socket — Low-level networking interface
  2. 经典书籍:《Python网络编程(第3版)》
  3. 调试工具
    • Wireshark(网络协议分析)
    • netcat(网络调试瑞士军刀)
    • Postman(API测试)

“Socket编程是打开网络世界的钥匙,掌握它意味着你能让任何设备对话。”
—— 网络工程师箴言

http://www.xdnf.cn/news/582733.html

相关文章:

  • 高性能图表库SciChart WPF v8.8全新发布——提升渐变颜色映射高度
  • Mysql的主从同步
  • VR溺水安全:为生命筑牢数字化防线
  • 常见算法题目1 - 给定一个整数数组和一个目标值,找出数组中两个数之和等于目标值的数组下标组合
  • MySQL的相关操作
  • RTC技术
  • 第六部分:阶段项目 5:构建 NestJS RESTful API 服务器
  • STM32+rt-thread使用MQTT协议连接腾讯物联网平台
  • 旧物回收小程序:让闲置焕发光彩,为生活增添价值
  • spring boot启动报错:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)
  • 响应式架构下的调试挑战:WebDebugX 如何帮助前端稳住场面?
  • 优化 CRM 架构,解锁企业竞争力密码
  • 解决:VMware 虚拟机 Ubuntu 系统共享文件夹无法访问问题
  • 将 Docker 镜像推送到 GitLab Container Registry 的完整步骤
  • C++初阶-list的使用1
  • JAVA8怎么使用9的List.of
  • 数据结构与算法-线性表-双向链表(Double Linked List)
  • Excalidraw云端协作实战:如何用智能绘图打破地理限制?深度解析来了!
  • Chrome 缓存文件路径
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Blurry Loading (毛玻璃加载)
  • 二叉数的统一迭代法
  • 程序代码篇---Pytorch实现LATM+APF轨迹预测
  • 杰发科技AC7801——PWM获取固定脉冲个数
  • OpenAI 推出 Codex —— ChatGPT 内的“软件工程智能体”
  • 2025年- H42-Lc150 --146. LRU缓存(哈希表,双链表)需二刷--Java版
  • 先更新数据库,再删除缓存的cache aside策略
  • 6.DevOps体系之Jenkins
  • 深入掌握Node.js HTTP模块:从开始到放弃
  • JS实现直接下载PDF文件
  • 动手学深度学习12.6. 多GPU的简洁实现-笔记练习(PyTorch)