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

如何使用 Python 实现 UDP 通信?

1. UDP通信基础

UDP(用户数据报协议)是一种无连接的传输层协议,它提供了一种不可靠的数据传输服务,但具有较低的延迟和较小的开销。在Python中,可以使用socket模块来实现UDP通信。

2. 实现UDP服务端
import socketdef start_server(host='127.0.0.1', port=65432):"""启动一个UDP服务端:param host: 服务端监听的IP地址,默认为本地回环地址:param port: 服务端监听的端口"""with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:s.bind((host, port))print(f"Server listening on {host}:{port}")while True:data, addr = s.recvfrom(1024)  # 接收数据和客户端地址print(f"Received from {addr}: {data.decode()}")s.sendto(data, addr)  # 将接收到的数据发送回客户端if __name__ == "__main__":start_server()

代码解释

  • socket.socket(socket.AF_INET, socket.SOCK_DGRAM):创建一个UDP套接字。
  • s.bind((host, port)):绑定IP地址和端口。
  • s.recvfrom(1024):接收数据,最多1024字节,并返回数据和客户端地址。
  • s.sendto(data, addr):将数据发送到指定的客户端地址。
3. 实现UDP客户端
import socketdef start_client(host='127.0.0.1', port=65432):"""启动一个UDP客户端:param host: 服务端的IP地址:param port: 服务端的端口"""with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:while True:message = input("Enter a message to send: ")s.sendto(message.encode(), (host, port))data, _ = s.recvfrom(1024)  # 接收服务端发送的数据print(f"Received from server: {data.decode()}")if __name__ == "__main__":start_client()

代码解释

  • socket.socket(socket.AF_INET, socket.SOCK_DGRAM):创建一个UDP套接字。
  • s.sendto(message.encode(), (host, port)):发送数据到指定的服务端地址。
  • s.recvfrom(1024):接收服务端发送的数据,并返回数据和服务器地址。
4. 日常开发中的合理化使用建议
  1. 数据完整性:由于UDP是不可靠的,如果需要确保数据的完整性,应在应用层实现重传机制和校验和。
  2. 流量控制:UDP没有内置的流量控制机制,应根据网络状况和应用需求自行实现。
  3. 安全性:对于敏感数据的传输,应考虑使用DTLS(Datagram Transport Layer Security)进行加密。
  4. 广播和组播:UDP支持广播和组播,适用于需要向多个接收者发送数据的场景。
5. 实际开发过程中需要注意的点
  1. 资源管理:确保在通信结束后正确关闭套接字和其他资源,避免资源泄漏。
  2. 数据格式:在发送和接收数据时,应明确数据的格式(如JSON、XML等),并进行相应的序列化和反序列化操作。
  3. 错误处理:捕获和处理可能的异常,如网络错误、数据格式错误等。
  4. 性能优化:根据应用需求,优化数据包的大小和发送频率,以提高通信效率。
6. 错误处理示例
import socketdef start_server(host='127.0.0.1', port=65432):with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:s.bind((host, port))print(f"Server listening on {host}:{port}")while True:try:data, addr = s.recvfrom(1024)print(f"Received from {addr}: {data.decode()}")s.sendto(data, addr)except Exception as e:print(f"Error: {e}")if __name__ == "__main__":start_server()

代码解释

  • 使用try-except块捕获可能的异常,并打印错误信息。
7. 广播示例
import socketdef start_client(host='255.255.255.255', port=65432):with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)  # 启用广播while True:message = input("Enter a message to send: ")s.sendto(message.encode(), (host, port))data, _ = s.recvfrom(1024)print(f"Received from server: {data.decode()}")if __name__ == "__main__":start_client()

代码解释

  • s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1):启用广播功能。
8. 组播示例
import socketdef start_client(host='224.0.0.1', port=65432):with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:group = socket.inet_aton(host)mreq = group + socket.inet_aton('0.0.0.0')s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)  # 加入组播组while True:message = input("Enter a message to send: ")s.sendto(message.encode(), (host, port))data, _ = s.recvfrom(1024)print(f"Received from server: {data.decode()}")if __name__ == "__main__":start_client()

代码解释

  • s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq):加入指定的组播组。

相关文章:

如何使用 Python 实现 UDP 通信?

1. UDP通信基础 UDP(用户数据报协议)是一种无连接的传输层协议,它提供了一种不可靠的数据传输服务,但具有较低的延迟和较小的开销。在Python中,可以使用socket模块来实现UDP通信。 2. 实现UDP服务端 import socketd…...

MTK 配置文件梳理

文章目录 MTK 日常配置总结屏幕默认横竖屏显示ro.build.characteristics 属性修改修改点一:build\core\product_config.mk修改点二:build\make\core\main.mk修改是否成功,adb 验证 配置部分系统app handheld_product.mk配置系统属性、第三方应…...

论文笔记:Treat Visual Tokens as Text? But Your MLLM Only Needs Fewer Efforts to See

2024 10月的arxiv 1 主要idea 针对多模态大模型(如LLaVA),提出了一系列高效的剪枝策略 在显著降低计算开销(多达 88%)的同时,保持了模型在多模态任务中的性能表现 2 目前的问题 与文本 token 相比&…...

软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护

10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,主要解决这类问题。 1. 单体架构 特点: 所有资源(应用程序、数据库、文件)集中在一台服务器上。适用场景: 小型网站&am…...

2024美赛数学建模C题:网球比赛中的动量,用马尔可夫链求解!详细分析

文末获取历年美赛数学建模论文,交流思路模型 接下来讲解马尔可夫链在2024年C题中的运用 1. 马尔科夫链的基本原理 马尔科夫链是描述随机过程的一种数学模型,其核心特征是无记忆性。 简单来说,系统在某一时刻的状态只取决于当前状态&#x…...

23种设计模式之状态模式

目录 1. 简介2. 代码2.1 State (定义抽象状态接口)2.2 StartState (实现具体状态类)2.3 EndState (实现具体状态类)2.4 Context (定义上下文类)2.5 Test (测试类&#xf…...

Elasticsearch Serverless 中的数据流自动分片

作者:来自 Elastic Andrei Dan 在 Elastic Cloud Serverless 中,我们根据索引负载自动为数据流配置最佳分片数量,从而使用户无需摆弄分片。 传统上,用户会更改数据流的分片配置,以处理各种工作负载并充分利用可用资源。…...

YOLOv10改进,YOLOv10添加U-Netv2分割网络中SDI信息融合模块+GSConv卷积,助力小目标

理论介绍 完成本篇需要参考以下两篇文章,并已添加到YOLOv10代码中 YOLOv10改进,YOLOv10添加U-Netv2分割网络中SDI信息融合模块,助力小目标检测YOLOv10改进,YOLOv10添加GSConv卷积+Slim-neck,助力小目标检测,二次创新C2f结构下文都是手把手教程,跟着操作即可添加成功 目…...

xshell连接虚拟机,更换网络模式:NAT->桥接模式

NAT模式:虚拟机通过宿主机的网络访问外网。优点在于不需要手动配置IP地址和子网掩码,只要宿主机能够访问网络,虚拟机也能够访问。对外部网络而言,它看到的是宿主机的IP地址,而不是虚拟机的IP。但是,宿主机可…...

sql的where条件中使用case when

场景: 1、使用oracle数据库,数据类型为number,需要正无穷值。 2、数据表中有两个金额值,最大值和最小值, 如10~20, 30 ~40,40以上,数据库中这样设计 id name min max 1 j 10 20 2 …...

MacOS 上以源码形式安装 MySQL 5.7

以下是在 macOS 上从源码安装 MySQL 5.7 的步骤: 前置条件 安装 Homebrew:如果你还没有安装 Homebrew,可以在终端中运行以下命令进行安装: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install…...

MySQL 事务隔离级别详解

一、事务的基本概念 (一)什么是事务 事务是一个逻辑工作单元,由一组数据库操作组成。这些操作要么全部成功执行,要么全部回滚,以确保数据库的一致性。事务具有以下四个特性,通常被称为 ACID 特性&#xff…...

C语言——高精度问题

1、高精度计算的本质&#xff1a;竖式计算&#xff1b; 2、适用解决超出long long int 范围的大整数计算 #include<stdio.h> #include<string.h> #define N 100 char str1[N4]{0},str2[N4]{0}; int arr1[N4]{0},arr2[N4]{0}; int ans[N5]{0};//将字符串转化成整型…...

aippt:AI 智能生成 PPT 的开源项目

aippt&#xff1a;AI 智能生成 PPT 的开源项目 在现代办公和学习中&#xff0c;PPT&#xff08;PowerPoint Presentation&#xff09;是一种非常重要的展示工具。然而&#xff0c;制作一份高质量的PPT往往需要花费大量的时间和精力。为了解决这一问题&#xff0c;aippt项目应运…...

【Qt之·类QSettings·参数保存】

系列文章目录 文章目录 前言一、概述1.1 QSetting是什么1.2 为什么学习QSetting是重要的 二、不同存储位置的优缺点三、 QSetting的高级用法四、实例演示总结 前言 在当今的应用程序开发中&#xff0c;设置管理是一个至关重要的方面。应用程序的设置包括用户偏好、配置选项和其…...

location重定向和nginx代理

文章目录 1 location重定向1.1 概述1.2 rewrite跳转1.3 用例1.4 实验1.4.1 基于域名的跳转1.4.2 基于ip的跳转1.4.3 基于后缀名的跳转 2 nginx的代理2.1 nginx内置变量2.2 正向代理2.2.1 固定正向代理2.2.2 自动代理 2.3 反向代理2.3.1 负载均衡的算法2.3.2 负载均衡的特点2.3.…...

iptables详解

华子目录 什么是防火墙分类netfilter&#xff08;数据包过滤&#xff09;定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 ipta…...

Edge SCDN深度解析,边缘安全加速的创新实践

边缘安全加速&#xff08;Edge Secure Content Delivery Network&#xff0c;SCDN&#xff09;是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术&#xff0c;智能调度使用户就近获取所需内容&#xff0c;为…...

solidworks常见问题已解决

solidworks常见问题已解决 问题1&#xff1a;step总是提示默认模板无效。问题2&#xff1a;异型孔向导”时出现了“找不到标准数据库。问题3&#xff1a;找不到CalloutForm.txt文件&#xff0c;标注将由几何体定义。问题5&#xff1a;工程图显示文件损坏不能保存。问题6&#x…...

vCenter开启HA报错

昨天给客户开启vCenter开启HA功能报错,报错的内容比较多 博通官方给出解决办法 https://knowledge.broadcom.com/external/article/318929/error-vsphere-ha-agent-cannot-be-correct.html 常规的解决办法 1.关闭集群HA,再次开启HA 2.主机进入维护模式&#xff0c;再次加入…...

数据中心48V直连供电架构:从效率瓶颈到硬件设计实战

1. 数据中心供电演进&#xff1a;从香农理论到48V直连架构1948年&#xff0c;克劳德香农发表《通信的数学理论》&#xff0c;用1和0的二进制语言为信息时代奠基。六十八年后的今天&#xff0c;当我们谈论数据中心——这个承载着全球信息洪流的数字心脏时&#xff0c;讨论的焦点…...

算法时代,技术人如何寻找自己的 “人生硬代码”

前言&#xff1a;我们优化了代码&#xff0c;却常常忽略了人生系统在 AI 日新月异、信息密度持续升高的时代&#xff0c;很多人比过去更忙&#xff0c;却也更容易迷茫。作为技术人&#xff0c;我们熟悉架构设计、性能优化、代码重构和系统调优。面对一个工程问题时&#xff0c;…...

降AI率软件数据安全测评:嘎嘎降不留存vs拿你论文训练AI!

降AI率软件数据安全测评&#xff1a;嘎嘎降不留存vs拿你论文训练AI&#xff01; 一个月后导师消息&#xff1a;「你论文跟去年某高校论文相似度异常」 我硕士毕业季预算紧&#xff0c;搜降 AI 工具时格外注意「免费」「不限字数」这种关键词。找到一家工具——免费额度大、价…...

云原生存储优化:优化云原生环境的存储性能

云原生存储优化&#xff1a;优化云原生环境的存储性能 一、云原生存储优化概述 1.1 云原生存储优化的定义 云原生存储优化是指通过优化存储架构、配置和使用方式&#xff0c;提高云原生环境中存储的性能、可靠性和成本效益的过程。 1.2 云原生存储优化的价值 性能提升&#xff…...

如何用MIKE IO快速上手水文数据分析:Python数据处理终极指南

如何用MIKE IO快速上手水文数据分析&#xff1a;Python数据处理终极指南 【免费下载链接】mikeio Read, write and manipulate dfs0, dfs1, dfs2, dfs3, dfsu and mesh files. 项目地址: https://gitcode.com/gh_mirrors/mi/mikeio MIKE IO是一个功能强大的Python开源库…...

强力解密RPG Maker加密文件:新手快速上手指南

强力解密RPG Maker加密文件&#xff1a;新手快速上手指南 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerD…...

Linux串口通信终极指南:3步搞定CH341SER驱动安装,让Arduino开发不再卡壳

Linux串口通信终极指南&#xff1a;3步搞定CH341SER驱动安装&#xff0c;让Arduino开发不再卡壳 【免费下载链接】CH341SER CH341SER driver with fixed bug 项目地址: https://gitcode.com/gh_mirrors/ch/CH341SER 你是否曾经兴奋地拿起一块Arduino开发板&#xff0c;准…...

AI浪潮下,普通程序员如何避免沦为“提示词工程师”?

一、从“提示词执行者”到“质量架构师”&#xff1a;重新定义测试的价值锚点AI之所以能替代大量重复性测试工作&#xff0c;是因为它擅长处理“已知的已知”——那些规则明确、边界清晰的测试场景。然而&#xff0c;软件测试的真正价值&#xff0c;从来不在执行层面&#xff0…...

5G手机发展复盘:从技术挑战到市场现实的工程化演进

1. 从“挤牙膏”到“大跃进”&#xff1a;复盘2020年5G手机的真实开局2019年初&#xff0c;当高通在分析师面前用三星和摩托罗拉的工程样机演示5G时&#xff0c;整个行业都弥漫着一种乐观情绪&#xff0c;仿佛一场席卷全球的换机潮即将在2020年爆发。然而&#xff0c;作为一名在…...

D3KeyHelper:暗黑3游戏宏助手终极指南,五分钟轻松搞定技能连点

D3KeyHelper&#xff1a;暗黑3游戏宏助手终极指南&#xff0c;五分钟轻松搞定技能连点 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 想要在《暗黑破…...