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

Python网络编程从入门到精通:Socket核心技术+TCP/UDP实战详解

引言

网络编程是构建现代分布式系统的核心能力,而Socket作为通信的基石,其重要性不言而喻。本文将从零开始,通过清晰的代码示例原理剖析对比分析,带你彻底掌握Python中的Socket编程技术,涵盖TCP可靠连接UDP高效传输面向对象封装技巧。无论你是网络编程新手还是希望进阶的开发者,都能从中获益!

目录

引言

一、Socket核心概念

1.1 什么是Socket?

1.2 Socket通信流程

二、TCP通信实战

2.1 搭建TCP服务器

关键点解析:

2.2 搭建TCP客户端 

2.3 TCP三次握手机制

三、UDP通信实战

3.1 UDP与TCP的核心区别

3.2 搭建UDP服务器

3.3 搭建UDP客户端

核心区别:

四、面向对象编程:封装UDP模块

4.1 自定义UDP Socket类

4.2 服务器与客户端调用

服务器端:

客户端:

优势:

五、进阶应用与优化

5.1 多客户端并发处理

5.2 异常处理

5.3 安全性增强

六、总结与扩展


一、Socket核心概念

1.1 什么是Socket?

Socket是网络通信的“端点”,基于IP地址和端口实现不同设备间的数据传输。它支持两种协议:

  • TCP:面向连接,确保数据可靠传输(如文件下载)。

  • UDP:无连接,强调实时性但允许丢包(如视频流)。

1.2 Socket通信流程

  • 服务器端:绑定IP/端口 → 监听连接 → 接受请求 → 数据交互 → 关闭连接。

  • 客户端:连接服务器 → 发送/接收数据 → 关闭连接。


二、TCP通信实战

2.1 搭建TCP服务器

代码示例

import socket# 1. 创建Socket对象(默认TCP协议)
sk = socket.socket()
# 2. 绑定IP和端口
sk.bind(("127.0.0.1", 8080))
# 3. 监听连接
sk.listen()
print("服务器已启动,等待客户端连接...")# 4. 接受客户端连接(阻塞直到连接建立)
conn, addr = sk.accept()
print(f"客户端 {addr} 已连接")# 5. 接收客户端消息
data = conn.recv(1024).decode('utf-8')
print(f"收到消息:{data}")# 6. 发送响应
conn.send("Hello Client".encode('utf-8'))# 7. 关闭连接
conn.close()
sk.close()

关键点解析

  • bind():绑定本地地址,需确保端口未被占用。

  • accept():阻塞方法,等待客户端连接。

  • recv():接收数据需指定缓冲区大小(如1024字节)。

2.2 搭建TCP客户端 

import socketsk = socket.socket()
sk.connect(("127.0.0.1", 8080))  # 连接服务器sk.send("Hello Server".encode('utf-8'))  # 发送数据
response = sk.recv(1024).decode('utf-8')
print(f"服务器响应:{response}")sk.close()

2.3 TCP三次握手机制

TCP通过三次握手确保连接可靠性:

  1. SYN:客户端发送同步请求(序列号X)。

  2. SYN-ACK:服务器回复确认(序列号Y,确认号X+1)。

  3. ACK:客户端确认服务器响应(确认号Y+1)。

客户端 --SYN(X)--> 服务器
客户端 <--SYN(Y)+ACK(X+1)-- 服务器
客户端 --ACK(Y+1)--> 服务器

 三次握手完成后,双方进入ESTABLISHED状态,开始数据传输。

三、UDP通信实战

3.1 UDP与TCP的核心区别

特性TCPUDP
连接方式面向连接(可靠)无连接(高效)
数据顺序保证顺序不保证顺序
适用场景文件传输、Web请求实时视频、语音通话

3.2 搭建UDP服务器

import socketsk = socket.socket(type=socket.SOCK_DGRAM)  # 指定UDP协议
sk.bind(("127.0.0.1", 8080))while True:data, addr = sk.recvfrom(1024)  # 接收数据和客户端地址print(f"来自 {addr} 的消息:{data.decode('utf-8')}")reply = input("请输入回复:")sk.sendto(reply.encode('utf-8'), addr)  # 向指定地址发送

 3.3 搭建UDP客户端

import socketsk = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ("127.0.0.1", 8080)sk.sendto("Hello UDP Server".encode('utf-8'), server_addr)
response, _ = sk.recvfrom(1024)
print(f"服务器回复:{response.decode('utf-8')}")sk.close()

核心区别

  • UDP使用sendto()recvfrom(),需手动指定目标地址。

  • 无需建立连接,适合高频小数据包场景。

四、面向对象编程:封装UDP模块

通过封装提升代码复用性和可维护性。

4.1 自定义UDP Socket类

import socketclass UDPSocket:def __init__(self, ip="127.0.0.1", port=8080, encoding="utf-8"):self.sk = socket.socket(type=socket.SOCK_DGRAM)self.encoding = encodingself.address = (ip, port)def send(self, message, target_addr):self.sk.sendto(message.encode(self.encoding), target_addr)def receive(self):data, addr = self.sk.recvfrom(1024)return data.decode(self.encoding), addrdef bind(self):self.sk.bind(self.address)

4.2 服务器与客户端调用

服务器端

udp_server = UDPSocket(port=8080)
udp_server.bind()
while True:msg, addr = udp_server.receive()print(f"收到消息:{msg}")udp_server.send("已收到", addr)

客户端

udp_client = UDPSocket()
udp_client.send("Hello Server", ("127.0.0.1", 8080))
response, _ = udp_client.receive()
print(f"服务器回复:{response}")
优势
  • 统一编码处理,避免重复代码。

  • 支持快速扩展(如添加日志、加密功能)。

五、进阶应用与优化

5.1 多客户端并发处理

  • 多线程:为每个客户端连接分配独立线程。

  • 异步IO:使用asyncio实现高性能非阻塞通信。

5.2 异常处理

try:sk.connect(("127.0.0.1", 8080))
except ConnectionRefusedError:print("服务器未启动!")
except TimeoutError:print("连接超时!")

5.3 安全性增强

  • 使用ssl模块加密通信数据。

  • 示例:

import ssl
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
secure_socket = context.wrap_socket(sk, server_hostname="example.com")

六、总结与扩展

本文从Socket基础到高阶封装,系统讲解了Python网络编程的核心技术。关键点总结:

  1. TCP:可靠但开销大,适合需数据完整性的场景。

  2. UDP:高效但不可靠,适合实时应用。

  3. 面向对象封装:提升代码复用性和可维护性。

相关文章:

Python网络编程从入门到精通:Socket核心技术+TCP/UDP实战详解

引言 网络编程是构建现代分布式系统的核心能力&#xff0c;而Socket作为通信的基石&#xff0c;其重要性不言而喻。本文将从零开始&#xff0c;通过清晰的代码示例、原理剖析和对比分析&#xff0c;带你彻底掌握Python中的Socket编程技术&#xff0c;涵盖TCP可靠连接、UDP高效…...

2025MathorcupC题 音频文件的高质量读写与去噪优化 保姆级教程讲解|模型讲解

2025Mathorcup数学建模挑战赛&#xff08;妈妈杯&#xff09;C题保姆级分析完整思路代码数据教学 C题&#xff1a;音频文件的高质量读写与去噪优化 随着数字媒体技术的迅速发展&#xff0c;音频处理成为信息时代的关键技术之一。在日常生活中&#xff0c;从录音设备捕捉的原始…...

.net core web api 数据验证(DataAnnotations)

目录 一、什么是 DataAnnotations&#xff1f; 二、扩展验证逻辑&#xff08;自定义验证器&#xff09; 一、什么是 DataAnnotations&#xff1f; DataAnnotations 是一组特性&#xff08;Attributes&#xff09;&#xff0c;用于在模型类上定义验证规则。主要用于属性级别的…...

【工具-Krillin AI】视频翻译、配音、语音克隆于一体的一站式视频多语言转换工具~

Krillin AI 是全能型音视频本地化与增强解决工具。这款简约而强大的工具&#xff0c;集音视频翻译、配音、语音克隆于一身&#xff0c;支持横竖屏格式输出&#xff0c;确保在所有主流平台&#xff08;哔哩哔哩&#xff0c;小红书&#xff0c;抖音&#xff0c;视频号&#xff0c…...

ICPR-2025 | 让机器人在未知环境中 “听懂” 指令精准导航!VLTNet:基于视觉语言推理的零样本目标导航

作者&#xff1a;Congcong Wen, Yisiyuan Huang, Hao Huang ,Yanjia Huang, Shuaihang Yuan, YuHao, HuiLin and Yi Fang 单位&#xff1a;纽约大学阿布扎比分校具身人工智能与机器人实验室&#xff0c;纽约大学阿布扎比分校人工智能与机器人中心&#xff0c;纽约大学坦登工程…...

Shiro-550 动调分析与密钥正确性判断

一、Shiro 简介 Apache Shiro是一个开源安全框架&#xff0c;用于构建 Java 应用程序&#xff0c;提供身份验证、授权、加密和会话管理等功能。 二、Shiro-550&#xff08;CVE-2016-4437&#xff09; 1、漏洞原理 Shiro 在用户登陆时提供可选项 RememberMe&#xff0c;若勾选…...

Python制作简易PDF查看工具PDFViewerV1.0查找功能优化

原文说明 为不破坏原文结构&#xff0c;因此功能优化不在原文中维护了。关于这款工具原文请通过下面链接访问。Python制作简易PDF查看工具PDFViewerV1.0 这款小工具基本功能已经可以作为一款文档浏览器使用&#xff0c;但还有一些美中不足的地方&#xff0c;本文将介绍对文本查…...

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤 2025/4/19 15:38 查询格式YUV/RGB 81 09 04 24 60 FF 90 50 00 00 FF 查询辨率帧率 81 09 04 24 72 FF 90 50 01 03 FF 查询LVDS mode : Singel output/Dual output 81 09 04 24 74 FF 90 50 00 00 FF 配置405的机…...

从0开发一个unibest+vue3项目,使用vscode编辑器开发,总结vue2升vue3项目开始,小白前期遇到的问题

开头运行可看官网 链接: unibest官网 一&#xff1a;vscode中vue3代码显示报错标红波浪线 去查看扩展商店发现一些插件都弃用了&#xff0c;例如h5的插件以及vue老插件 解决办法&#xff1a;下载Vue - Official插件&#xff08;注意&#xff1a;横杠两边是要加空格的&#xff…...

Jinja2模板引擎SSTI漏洞

1. 引入 再研究大模型相关应用的漏洞CVE-2025-25362时&#xff08;参考1&#xff09;&#xff0c;看到作者给了比较详细的分析&#xff08;参考2&#xff09;。下面对这个漏洞做个介绍。 2. 漏洞类型 这个漏洞属于CWE-1336&#xff0c;它主要关注在使用模板引擎进行脚本化处…...

HTML5好看的水果蔬菜在线商城网站源码系列模板4

文章目录 1.设计来源1.1 主界面1.2 关于我们1.3 商品信息1.4 新闻资讯1.5 联系我们1.5 登录注册 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/147264262 HTML5好看的水果…...

Python语法系列博客 · 第6期[特殊字符] 文件读写与文本处理基础

上一期小练习解答&#xff08;第5期回顾&#xff09; ✅ 练习1&#xff1a;字符串反转模块 string_tools.py # string_tools.py def reverse_string(s):return s[::-1]调用&#xff1a; import string_tools print(string_tools.reverse_string("Hello")) # 输出…...

多人五子棋联机对战平台 测试报告

目录 项目介绍 测试用例设计 部分功能测试示例 自动化测试 测试范围 排除范围 自动化测试目录​编辑 执行全部自动化测试用例 性能说明 总结 性能测试 结果分析 测试总结 项目介绍 该项目基于WebSocket实现实时通信&#xff0c;采用SSM框架构建在线五子棋多人联机…...

docker基本使用命令

一、镜像 1、拉取镜像 docker pull busybox docker pull nginx:1.26-alpine 2、查看本地镜像 [rootRocky-1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 4e1b6bae1e48 18 hours ago 192MB busybox lates…...

欣佰特携数十款机器人相关前沿产品,亮相第二届人形机器人和具身智能行业盛会

2025年4月15日至16日&#xff0c;备受关注的第二届中国人形机器人与具身智能产业大会已在北京成功举行。作为国内前沿科技及产品服务领域的重要参与者&#xff0c;欣佰特科技携众多前沿产品精彩亮相&#xff0c;全方位展示了其在人形机器人与具身智能领域的创新产品。 在本次大…...

windows安装hadoop-3.3.5(图文教程)

本章教程,记录在Windows操作系统上安装hadoop-3.3.5的整个过程。 一、基础环境准备 JDK版本:java version “1.8.0_431” ,并且配置JAVA_HOME系统环境变量 hadoop版本:3.3.5,配置HADOOP_HOME系统环境变量。 下载地址:https://archive.apache.org/dist/hadoop/common/hado…...

【eNSP实验】OSPF单区域配置

简介 OSPF&#xff08;开放最短路径优先&#xff09;是一种基于链路状态算法的内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于自治系统内部动态路由。其核心机制为&#xff1a;各路由器通过泛洪链路状态通告&#xff08;LSA&#xff09;同步网络拓扑&#xff0c;构…...

从 SQL2API 到 Text2API:开启数据应用开发的新征程

在技术革新浪潮的席卷下&#xff0c;数据应用开发领域正经历着深刻变革。曾经&#xff0c;构建数据 API 需要开发者具备扎实的数据库知识和编程技能&#xff0c;手动编写复杂的 SQL 查询与 API 代码&#xff0c;这一过程不仅耗时费力&#xff0c;还将众多非技术人员阻挡在数据应…...

4月18日日记(补)

昨天玩的太疯狂了最后也没来得及写日记&#xff0c;补上&#xff08;&#xff09; 正常的早八微积分&#xff0c;英语&#xff0c;下午的思政课非常的疯狂啊&#xff0c;因为是代课老师&#xff0c;她给我们很多机会强大加分&#xff0c;大家都知道这是一个追分的好机会&#x…...

手撕 简易HashMap

put()、get()、remove() 方法 计算存储数组位置和k-vNode节点 public int indexOf(K key){return key.hashCode() & (table.length - 1);}static class Node<K, V>{K key;V value;Node<K, V> next;public Node(K key, V value){this.key key;this.value val…...

【技术派后端篇】ElasticSearch 实战指南:环境搭建、API 操作与集成实践

1 ES介绍及基本概念 ElasticSearch是一个基于Lucene 的分布式、高扩展、高实时的基于RESTful 风格API的搜索与数据分析引擎。 RESTful 风格API的特点&#xff1a; 接受HTTP协议的请求&#xff0c;返回HTTP响应&#xff1b;请求的参数是JSON&#xff0c;返回响应的内容也是JSON…...

鸿蒙语言基础

准备工作 去鸿蒙官网下载开发环境 点击右侧预浏览&#xff0c;刷新和插销按钮&#xff0c;插销表示热更新&#xff0c;常用按钮。 基础语法 string number boolean const常量 数组 let s : string "1111"; console.log("string", s);let n : number …...

在 Amazon Graviton 上运行大语言模型:CPU 推理性能实测与调优指南

引言 在生成式 AI 浪潮中&#xff0c;GPU 常被视为大模型推理的唯一选择。然而&#xff0c;随着 ARM 架构的崛起和量化技术的成熟&#xff0c;CPU 推理的性价比逐渐凸显。本文基于 Amazon Graviton 系列实例与 llama.cpp 工具链&#xff0c;实测了 Llama 3、DeepSeek 等模型的…...

每日定投40刀BTC(14)20250409 - 20250419

定投 坚持 《磨剑篇》浮生多坎壈&#xff0c;志业久盘桓。松柏凌霜易&#xff0c;骅骝涉险难。砺锋临刃缺&#xff0c;淬火取金残。但使精魂在&#xff0c;重开万象端。...

详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链

在网络安全领域&#xff0c;反射型跨站脚本攻击&#xff08;Reflected Cross-Site Scripting&#xff0c;简称反射型 XSS&#xff09;因其短暂的生命周期和临时性&#xff0c;常被视为“低危”漏洞&#xff0c;威胁性不如存储型或 DOM 型 XSS。然而&#xff0c;这种看法低估了它…...

服务治理-服务注册

一个服务在真实项目部署的时候&#xff0c;如果压力较大&#xff0c;会做多实例部署。 在IDEA里面做多实例部署的话&#xff0c;只需要配置多个启动项。...

NestJS——多环境配置方案(dotenv、config、@nestjs/config、joi配置校验)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

MongoDB导出和导入数据

安装mongodump工具 参考文章mongodump工具安装及使用详解_mongodump安装-CSDN博客 MongoDB导入导出和备份的命令工具从4.4版本开始不再自动跟随数据库一起安装&#xff0c;而是需要自己手动安装。 官方网站下载链接&#xff1a;Download MongoDB Command Line Database Tools …...

数据从辅存调入主存,页表中一定存在

在虚拟内存系统中&#xff0c;​数据从辅存调入主存时&#xff0c;页表中一定存在对应的页表项&#xff0c;但页表项的「存在状态」会发生变化。以下是详细分析&#xff1a; 关键逻辑 ​页表的作用 页表是虚拟内存的核心数据结构&#xff0c;记录了虚拟地址到物理地址的映射关系…...

Serving入门

ServingHelloWorld Serverless 一个核心思想就是按需分配&#xff0c;那么 Knative 是如何实现按需分配的呢&#xff1f;另外在前面已经了解到 Knative Serving 在没有流量的时候是可以把Pod 缩容到零的。接下来就通过一些例子体验一下 Knative 缩容到零和按需自动扩缩容的能力…...