Python Socket入门学习

发布时间:2026/7/25 19:23:39

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/7/25 19:23:39

如何快速解密音乐文件:面向普通用户的完整指南 【免费下载链接】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/7/25 19:13:39

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

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

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

2026/7/25 19:13:39

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

深入解析Tiva TM4C EEPROM寄存器:从寻址到安全机制的底层实践

深入解析Tiva TM4C EEPROM寄存器:从寻址到安全机制的底层实践

2026/7/25 21:13:44

1. 项目概述与EEPROM核心价值在嵌入式系统开发中,我们经常需要一种能够“记住”关键信息的存储器,比如设备的校准参数、用户的配置选项、运行日志或者产品的序列号。这些信息需要在系统断电后依然保持,并且在系统运行时能够被修改。Flash存储…

3个秘诀:怎样用智能建模工具快速创建专业建筑场景

3个秘诀:怎样用智能建模工具快速创建专业建筑场景

2026/7/25 21:13:44

3个秘诀:怎样用智能建模工具快速创建专业建筑场景 【免费下载链接】building_tools Building generation addon for blender 项目地址: https://gitcode.com/gh_mirrors/bu/building_tools 还在为Blender中的复杂建筑建模而烦恼吗?Building Tools…

一张SD室内效果图=3小时人工建模?揭秘某TOP5设计事务所内部使用的自动化批处理脚本(限200份免密领取)

一张SD室内效果图=3小时人工建模?揭秘某TOP5设计事务所内部使用的自动化批处理脚本(限200份免密领取)

2026/7/25 21:13:44

更多请点击: https://codechina.net 第一章:SD室内设计效果图的生成逻辑与行业痛点 Stable Diffusion(SD)在室内设计效果图生成中,依赖于文本提示词(prompt)驱动潜在空间扩散过程,…

Win11Debloat终极指南:5分钟让你的Windows 11重获新生

Win11Debloat终极指南:5分钟让你的Windows 11重获新生

2026/7/25 21:13:44

Win11Debloat终极指南:5分钟让你的Windows 11重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cu…

C++算术平均值计算优化:从C++98到C++23的性能演进与实战指南

C++算术平均值计算优化:从C++98到C++23的性能演进与实战指南

2026/7/25 21:13:44

1. 项目概述:为什么我们要重新审视算术平均值?算术平均值,这个在数学课本里就出现过的概念,对程序员来说简直是家常便饭。从计算学生平均分到分析系统性能指标,(a b ... n) / count这个公式我们闭着眼睛都能写出来。…

如何用Office RibbonX Editor快速定制你的Office功能区界面

如何用Office RibbonX Editor快速定制你的Office功能区界面

2026/7/25 21:03:44

如何用Office RibbonX Editor快速定制你的Office功能区界面 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/gh_mirrors/of/office-ribbonx-editor …

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/25 6:25:13

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/24 19:29:25

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/25 9:26:35

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

挑战一天速通Spring全家桶!

挑战一天速通Spring全家桶!

2026/7/25 0:02:22

不知道各位Java好大哥们闲的时候会不会去关注Spring目前的官网,你会发现他的slogan是: Spring makes Java Simple。它让Java的开发变得更加简单。某种意义上来说:是Spring成就了Java!但随之而来的就是:由他之后诞生出来的各种组件…

挑战一天速通Java高并发!

挑战一天速通Java高并发!

2026/7/25 0:02:22

有出去面试的朋友肯定深有感受,像我们刚入行那会面试的加分项现在卷得已经成为了面试的基础题(手动狗头)。其中最典型的就属这个Java并发编程了。之前一般只有大厂才会有高并发编程相关的面试内容,但现在只要你入了Java行业就会涉…

从暴雪到米哈游都在用的平衡性评估框架,深度拆解LSTM+胜率归因分析法(附开源工具链)

从暴雪到米哈游都在用的平衡性评估框架,深度拆解LSTM+胜率归因分析法(附开源工具链)

2026/7/25 0:02:22

更多请点击: https://kaifayun.com 第一章:AI 游戏平衡性分析 现代游戏开发中,AI 不再仅用于控制 NPC 行为,更被深度整合进游戏平衡性调优流程。通过强化学习与对抗性仿真,AI 可以在数百万局对局中自动识别数值失衡点…