Python Socket入门学习

发布时间:2026/9/25 4:14:03

Python Socket入门学习
前言网络编程是后端开发、爬虫、内网穿透、即时通讯等场景的基础而Socket就是实现网络通信最核心的接口。很多初学者刚接触网络编程时会被TCP、UDP、IP、端口等概念搞得一头雾水。本篇从基础概念出发使用原生Python标准库socket从零搭建服务端与客户端通信示例带你快速上手Socket编程。前置要求掌握Python基础语法无需深入网络底层原理。Python内置socket模块不需要额外pip安装。一、什么是SocketSocket套接字可以理解为网络上两个程序通信的端点。两台主机想要互相传递数据一端开启服务监听另一端发起连接依靠IP地址端口唯一标识一个Socket通信通道。两种最常用通信协议TCP面向连接、可靠通信数据不会丢失、顺序不变。通信前必须建立连接三次握手文件传输、聊天软件大多使用TCP。UDP无连接、不可靠通信不用建立连接发送速度快适合直播、语音通话、广播场景可能丢包。Pythonsocket库同时支持TCP与UDP套接字。二、TCP通信完整示例重点TCP通信流程服务端创建socket → 绑定IP端口(bind) → 开始监听(listen) → 阻塞等待连接(accept) → 收发数据客户端创建socket → 连接服务端(connect) → 收发数据2.1 TCP服务端代码 server.pyimportsocket# 1. 创建TCP套接字 SOCK_STREAM代表TCPserver_socketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2. 绑定地址与端口0.0.0.0代表监听本机所有网卡HOST0.0.0.0PORT8888server_socket.bind((HOST,PORT))# 3. 开启监听参数为允许等待的最大连接数server_socket.listen(5)print(f服务端启动成功监听端口{PORT})# 4. 循环等待客户端接入whileTrue:# accept()阻塞直到有客户端连接conn,addrserver_socket.accept()print(f新客户端接入{addr})# 接收客户端数据缓冲区大小1024字节dataconn.recv(1024)ifnotdata:conn.close()continueprint(收到客户端消息,data.decode(utf-8))# 向客户端发送响应resp服务端已收到你的消息conn.send(resp.encode(utf-8))# 关闭当前客户端连接conn.close()2.2 TCP客户端代码 client.pyimportsocket# 创建TCP套接字client_socketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 连接服务端地址HOST127.0.0.1PORT8888client_socket.connect((HOST,PORT))# 发送数据socket只能传输字节流字符串需要encode编码msgHello Socket!client_socket.send(msg.encode(utf-8))# 接收服务端返回消息recv_dataclient_socket.recv(1024)print(收到服务端响应,recv_data.decode(utf-8))# 关闭套接字client_socket.close()运行测试终端先运行服务端python server.py新开终端运行客户端python client.py输出效果服务端控制台 服务端启动成功监听端口8888 新客户端接入(127.0.0.1, 51234) 收到客户端消息 Hello Socket! 客户端控制台 收到服务端响应 服务端已收到你的消息⚠️ 注意要点Socket传输只有bytes字节流字符串必须encode()接收后使用decode()解码127.0.0.1仅本机访问想要局域网其他设备连接服务端绑定0.0.0.0客户端填写服务端局域网IP端口不能被其他程序占用占用会抛出OSError。三、UDP通信示例UDP不需要建立连接不需要listen和accept收发更加轻量化。UDP服务端 udp_server.pyimportsocket# SOCK_DGRAM 代表UDPudp_serversocket.socket(socket.AF_INET,socket.SOCK_DGRAM)udp_server.bind((0.0.0.0,9999))print(UDP服务端启动端口9999)whileTrue:data,addrudp_server.recvfrom(1024)print(f来自{addr}消息{data.decode(utf-8)})udp_server.sendto(UDP收到.encode(utf-8),addr)UDP客户端 udp_client.pyimportsocket udp_clientsocket.socket(socket.AF_INET,socket.SOCK_DGRAM)udp_client.sendto(UDP测试消息.encode(utf-8),(127.0.0.1,9999))data,addrudp_client.recvfrom(1024)print(服务端回复,data.decode(utf-8))udp_client.close()四、常见踩坑总结编码报错收发忘记encode/decode中文极易出现乱码统一使用utf-8端口占用修改PORT或者关闭占用端口的进程客户端连不上防火墙拦截、IP填写错误、服务端未绑定0.0.0.0recv阻塞卡死TCP连接断开后recv会返回空字节代码中需要判断单次recv不能接收全部大数据缓冲区有限传输大文件需要循环接收。五、进阶拓展方向原生基础Socket仅实现一对一短连接通信后续可以延伸学习使用多线程/多进程处理多个客户端并发连接IO多路复用 select / selectors 实现高并发服务基于Socket实现简易聊天室、文件传输封装协议头自定义通信数据包格式异步网络编程 asyncio socket第三方框架Twisted、gevent。结束语Socket是网络编程的基石HTTP、WebSocket底层依然基于Socket封装。熟练掌握原生socket模块能帮助你理解各类网络框架底层通信逻辑。本篇示例均为最简可运行代码建议手动敲一遍运行调试加深理解。

相关新闻

如何快速解密音乐文件:面向普通用户的完整指南

如何快速解密音乐文件:面向普通用户的完整指南

2026/8/24 22:37:22

如何快速解密音乐文件:面向普通用户的完整指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitc…

Docker镜像定制实战:从基础镜像到部署Nginx服务

Docker镜像定制实战:从基础镜像到部署Nginx服务

2026/9/3 11:45:42

如果你已经掌握了 Docker 的基本命令,能够拉取镜像、运行容器,但每次进入容器,都感觉像进入了一个“毛坯房”——没有你熟悉的工具,网络不通,想装个软件都找不到源。于是,你开始手动yum install&#xff0c…

从《海贼王》重制看大型动画项目的工程化挑战与流水线构建

从《海贼王》重制看大型动画项目的工程化挑战与流水线构建

2026/9/8 1:32:48

在动画制作领域,WIT STUDIO(俗称“霸权社”)与Netflix联手重制经典长篇动画《海贼王》,并将其命名为《THE ONE PIECE》,这无疑是一次极具野心和话题性的尝试。对于关注动画工业流程、项目管理、技术升级以及IP运营的开…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/23 22:20:06

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/23 14:32:22

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/24 3:39:17

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/23 14:31:31

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/24 7:10:52

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/23 14:34:03

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/24 16:02:49

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/21 23:38:13

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/22 0:48:53

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…