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

网络通信的瑞士军刀:Python socket库全解析

文章目录

  • 网络通信的瑞士军刀:Python socket库全解析
    • 背景
    • 库介绍
    • 安装与重要性
    • 简单库函数使用方法
    • 场景应用
    • 常见Bug及解决方案
    • 总结

在这里插入图片描述

网络通信的瑞士军刀:Python socket库全解析

背景

在现代编程中,网络通信是不可或缺的一部分。无论是构建客户端与服务器之间的通信,还是实现多设备间的信息交换,都需要一个强大的工具来实现这些功能。Python,作为一种广泛使用的编程语言,提供了一个名为socket的标准库,它就是实现网络通信的核心工具。socket库允许你创建套接字,这是网络通信的基本构建块,使得数据能够在网络中传输。接下来,我们将深入了解这个库的功能和使用方法。

库介绍

socket是Python的标准库之一,它提供了访问BSD套接字接口的方法。这意味着,使用socket库,你可以创建客户端和服务器端的网络应用程序,实现TCP/IP和UDP协议的通信。由于它是Python的标准库,你无需额外安装,可以直接在你的Python代码中导入并使用。

安装与重要性

由于socket是Python的标准库,它的重要性不言而喻。它为Python开发者提供了一个统一的接口来处理网络通信,使得开发者无需关心底层的网络协议细节,就可以轻松实现网络功能。这不仅提高了开发效率,也保证了程序的可移植性和稳定性。

简单库函数使用方法

以下是socket库中的一些基本函数及其使用方法:

  1. socket.socket() - 创建一个新的socket对象。

    import socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    

    这里创建了一个基于IPv4的TCP socket。

  2. socket.bind() - 将socket绑定到一个地址和端口上。

    host = 'localhost'
    port = 12345
    s.bind((host, port))
    

    将socket绑定到本地主机的12345端口。

  3. socket.listen() - 开始监听传入的连接。

    s.listen()
    

    使socket开始监听连接。

  4. socket.accept() - 接受一个新连接。

    conn, addr = s.accept()
    

    接受连接,并返回一个新的socket对象和客户端地址。

  5. socket.send() - 发送数据。

    data = 'Hello, world'
    conn.send(data.encode('utf-8'))
    

    发送字符串数据。

  6. socket.recv() - 接收数据。

    data = conn.recv(1024)
    print(data.decode('utf-8'))
    

    接收最多1024字节的数据。

场景应用

以下是socket库在不同场景下的应用示例:

  1. TCP服务器 - 一个简单的TCP服务器,接收客户端连接并响应。

    while True:conn, addr = s.accept()print('Connected by', addr)conn.send(b'Hello, client!')conn.close()
    
  2. TCP客户端 - 一个简单的TCP客户端,连接服务器并接收响应。

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 12345))
    data = s.recv(1024)
    print(data.decode('utf-8'))
    s.close()
    
  3. UDP通信 - 使用UDP协议发送和接收数据。

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.sendto(b'Hello', ('localhost', 12345))
    data, addr = s.recvfrom(1024)
    print(data.decode('utf-8'))
    s.close()
    
  4. 多线程服务器 - 一个使用多线程的服务器,可以同时处理多个客户端。

    import threading
    def client_thread(conn):conn.send(b'Hello, client!')conn.close()
    while True:conn, addr = s.accept()thread = threading.Thread(target=client_thread, args=(conn,))thread.start()
    
  5. 非阻塞socket - 设置socket为非阻塞模式,用于异步通信。

    s.setblocking(0)
    

常见Bug及解决方案

  1. “Connection refused”错误 - 通常表示连接到的端口没有服务监听。

    # 错误代码
    s.connect(('localhost', 12345))
    # 解决方案:确保服务器正在监听指定的端口
    
  2. “Broken pipe”错误 - 发生在尝试写入一个已经关闭的连接上。

    # 错误代码
    conn.send(data)
    # 解决方案:检查连接是否仍然打开,或者使用try-except捕获异常
    try:conn.send(data)
    except BrokenPipeError:print("Connection is closed")
    
  3. “Timeout”错误 - 发生在socket操作超时时。

    # 错误代码
    s.settimeout(10)
    data = s.recv(1024)
    # 解决方案:增加超时时间或优化网络条件
    s.settimeout(30)
    

总结

socket库是Python中处理网络通信的强大工具,它提供了创建和操作套接字的功能,使得开发者可以轻松实现客户端和服务器之间的通信。通过本文的介绍,你应该对socket库有了更深入的了解,包括它的基本函数、应用场景以及常见的问题和解决方案。掌握socket库,将使你在网络编程领域更加游刃有余。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

在这里插入图片描述

相关文章:

网络通信的瑞士军刀:Python socket库全解析

文章目录 网络通信的瑞士军刀:Python socket库全解析背景库介绍安装与重要性简单库函数使用方法场景应用常见Bug及解决方案总结 网络通信的瑞士军刀:Python socket库全解析 背景 在现代编程中,网络通信是不可或缺的一部分。无论是构建客户端…...

【笔记️】魔爪 Mini mx 使用快捷键

B站教程地址:MOZA魔爪的个人空间-MOZA魔爪个人主页-哔哩哔哩视频 1、开关键: 单击 → 开启录制/拍照 → 再次单击结束;休眠时,单击晚醒 双击 → 切换拍照/录制模式 三击 → 切换横竖拍 长按 → 关机 2、变焦键: 单击 → 切换航向俯仰跟随模式 ( 开机默…...

去除 el-input 输入框的边框(element-ui@2.15.13)

dgqdgqdeMac-mini spid-admin % yarn list --pattern element-ui yarn list v1.22.22 └─ element-ui2.15.13 ✨ Done in 0.23s.dgqdgqdeMac-mini spid-admin % yarn list vue yarn list v1.22.22 warning Filtering by arguments is deprecated. Please use the pattern opt…...

Vue中的一些用法

一、验证规则: 身份证的验证规则: 电话号码的验证规则: 二、选中一项后禁用其他选项: data(){ return{ dataForm{ medicalHistory:[] } }, 三、多选框选择后页面中不显示数据: 在表单提交时加 .join(",&…...

异步爬虫之协程的基本原理

我们知道爬虫是 IO 密集型任务,例如使用 requests 库来爬取某个站点,当发出一个请求后,程序必须等待网站返回响应,才能接着运行,而在等待响应的过程中,整个爬虫程序是一直在等待的,实际上没有做…...

Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)

前言 本文最开始属于此文《视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中,在机器人动作预测也被运用的越来越多,加之DiT确实是一个比较大的创新,影响力大&…...

CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)

文章目录 3. Aglie methods(敏捷方法)3.1 Aglie methods(敏捷方法)3.1.1 特点3.1.2 优点3.1.3 缺点3.1.4 原则3.1.5 计划驱动与敏捷方法的对比 3.2 Scrum3.2.1 Scrum roles3.2.2 Scrum Activities and Artifacts3.2.2.1 Product B…...

【Git】-- 在本地执行 git fetch 发生异常

目录 1、现象 2、解决参考 2.1 检查网络连接 2.2 更新 Git 客户端 2.3 更改 GitHub URL 的访问协议 2.4 禁用 SSL 验证(临时解决) 2.5 检查系统的 CA 证书 2.6 重新克隆仓库 1、现象 在本地执行 $ git fetch upstream 时,抛出以下…...

Apache Doris 创始人:何为“现代化”的数据仓库?

在 12 月 14 日的 Doris Summit Asia 2024 上,Apache Doris 创始人 & PMC 成员马如悦在开场演讲中,围绕“现代化数据仓库”这一主题,指出 3.0 版本是 Apache Doris 研发路程中的重要里程碑,他将这一进展总结为“实时之路”、“…...

高校网络安全存在的问题与对策研究

目 录 摘 要1 第1章 引言2 1.1研究背景2 1.2研究意义2 第2章系统开发的相关技术简介3 2.1 Spring boot框架3 2.2 MySQL简介3 2.3 Vue框架3 2.4 JAVA简介3 第3章 系统需求分析4 3.1可行性分析4 3.1.1技术可行性4 3.1.2运行可行性4 3.1.3经济可行性5 3.2功能需求…...

Redis的数据类型,线程,持久化机制

1. Redis是单线程还是多线程的,为什么? Redis是单线程的(传统实现) Redis在传统的实现中是单线程的。尽管它处理的任务很多,但它使用单线程来处理所有客户端的请求。这个设计决策有几个关键原因: 简化模型…...

什么是ondelete cascade以及使用sqlite演示ondelete cascade使用案例

什么是ondelete cascade ‌ON DELETE CASCADE是数据库中的一种约束,用于自动删除相关的记录‌。具体来说,当一个表中的记录(父表)被删除时,与其相关的其他表(子表)中的记录也会被自动删除&…...

Java设计模式 —— 【结构型模式】享元模式(Flyweight Pattern) 详解

文章目录 概述结构案例实现优缺点及使用场景 概述 享元模式也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象; 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象…...

数据的简单处理——pandas模块——选择数据

要对读取的数据进行编辑,需要先学会选择数据的操作,如果选择行数据、列数据或者同时选择行列数据。 ############################## ##作者:白雪公主的后妈 ##时间:2024年12月29日 ##主题:数据的简单处理——pandas模…...

淘宝/天猫购物车商品列表API:深度解析与应用实践

引言 在电商领域,购物车功能是提升用户体验和增加销售额的关键工具。淘宝和天猫作为中国最大的电商平台,提供了丰富的API接口,其中包括获取购物车商品列表的API,即buyer_cart_list。本文将深入解析淘宝/天猫购物车商品列表API的功…...

位置式PID-控制步进电机-位置环-stm32

基本原理 1、软件设计 本闭环控制例程是在步进电机编码器测速例程的基础上编写的,这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到,完整的代码请参考本章配套的工程。 我们创建了4个文件:bsp_pid.c和bsp_pid.h文件用来存放PID控制器相关程序,bsp_s…...

关于Qt::BlockingQueuedConnection的死锁问题

绑定信号槽时,如果信号对象和槽对象属于不同的线程,通过Qt::BlockingQueuedConnection可以实现同步调用,即发送信号的代码等待槽函数返回才继续运行 文档的说明: Qt::QueuedConnection The slot is invoked when control returns…...

Excel for Finance 07 `FV PV` 函数

Excel 的 FV 函数用于计算一笔投资在未来的价值,基于固定的利率和定期付款。这是一个金融函数,常用来分析储蓄计划、贷款、或投资的增长。 语法: FV(rate, nper, pmt, [pv], [type])参数说明: rate(必需)&…...

驱动开发系列31 - Linux Graphics 调试 mesa 的 glDrawArrays (三)

一:概述 接着前面驱动开发系列26 - Linux Graphics 调试 mesa 的 glDrawArrays (二)-CSDN博客的文章继续分析下glDrawArrays的实现,本文介绍一下在Gallium3D HW Driver中,驱动如何将绘制命令提交给GPU执行。看下驱动层的执行逻辑:即 draw_vbo 的过程。 二:回顾下draw_vbo…...

【探花交友】day03—MongoDB基础

目录 课程介绍 1、通用设置 1.1 需求分析 1.2 查询通用设置 1.2 陌生人问题 1.3 通知设置 1.4 黑名单管理 2、MongoDB简介 1.1、MongoDB简介 1.2、MongoDB的特点 1.3 数据类型 3、MongoDB入门 2.1、数据库以及表的操作 2.2、新增数据 2.3、更新数据 2.4、删除数…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...