【Python】接收UDP数据(保姆级图文+附测试工具文件+api例程)
目录
- API说明:
- 1.创建套接字
- 2.绑定本地信息(ip和port)
- 3.接收数据
- 4.关闭套接字
- 基本例程
- 注意事项
- 总结
欢迎关注 『Python』 系列,持续更新中
欢迎关注 『Python』 系列,持续更新中
下图来自博客园的博主——小名叫小明,说明了udp网络程序模型
API说明:
1.创建套接字
udp_socket = socket.socket(参数1, 参数2)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- 参数1:family(给定的套接族)一般有两种重要参数
- socket.AF_INET(用于服务器与服务器之间的网络通信)
- socket.AF_INET6 (基于IPV6方式的服务器与服务器之间的网络通信)
- 参数2:type(套接字类型),也是一般两个类型
- socket.SOCK_STREAM(基于TCP的流式socket通信)
- socket.SOCK_DGRAM(基于UDP的数据报式socket通信)
- 说明:这里我们使用的是IP4连接所以选择socket.AF_INET;UDP数据发送所以选择socket.SOCK_DGRAM。
简单来说,见面就是一行udp_socket = socket.socket(socket.AF_INET,cosket.SOCK_DGRAM)
可以理解为英语中的固定搭配。
2.绑定本地信息(ip和port)
local_addr = (“参数1”, 参数2)
udp_socket.bind(local_addr)local_addr = ("", 60826) udp_socket.bind(local_addr)
- 参数1:表示本地的ip
- 参数2:表示本地的端口
- 说明:本机ip可以为空,会自动获取,如果你对于ip知识不了解,并且是本机上接收UDP数据,可以为空。端口号自己设定一定要是没有被占用的端口号,建议随便输一个30000起步的。
3.接收数据
recv_data = udp_socket.recvfrom(参数1)
recv_data = udp_socket.recvfrom(1024)
- 参数1:表示本次接收数据的最大字节数1024字节
- 说明:等待接收对方发送的数据。如果没有接收到数据会一直等待,产生阻塞。
4.关闭套接字
udp_socket.close()
- 直接这么写就完事儿了
基本例程
为了验证程序是否真的能接受到UDP数据,我们用网络调试助手来发送数据给本机,让我们的python程序来接收试试看。
工具下载百度链接:https://pan.baidu.com/s/19pzqqUczM7cTxbGJvPwEDA
提取码:1hs6
先运行python程序开始接收数据,因为没有检测到数据会陷入阻塞,等待发送数据
然后把网络调试助手设置成如下图,输入数据后,点击发送数据
8E 10 02 00 90 BE 0C 01 51 00 00 89 60 C2 00 00 3F 00 30 11 28 7D 8D
,
网络调试助手就会每隔1秒钟一直发送数据包,我们这个测试程序是接收一次数据就会结束,所以后期可以封装成函数多次循环,接受更多数据。
成功接收数据后的效果截图
接收数据流程:
- 创建客户端套接字
- 绑定本地信息(ip和port)
- 接收数据
- 关闭套接字
# @Time : 2021/12/9 14:49
# @Author : 南黎
# @FileName: 接收udp数据.py
import socketdef main():# 1.创建一个udp套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2.绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配# 30000 表示本地的端口 ip一般不用写local_addr = ("", 60826)udp_socket.bind(local_addr)# 3. 等待接收对方发送的数据recv_data = udp_socket.recvfrom(1024)# 1024表示本次接收的最大字节数# 4. 显示对方发送的数据# 接收到的数据recv_data是一个元组# 第1个元素是对方发送的数据# 第2个元素是对方的ip和端口# print(recv_data)#输出接收到的原始数据数据是一个元组(b'\x8e\x10\x02\x00\x90\xbe\x0c\x01Q\x00\x00\x89`\xc2\x00\x00?\x000\x11(}\x8d', ('127.0.0.1', 10360))#注意如果发送和解码方式不一样会报错!()type类型都是bytes,但是一个是asc一个是hex解码方式不同)# 2个思路我2小时没找到实现方法:1.判断编码方式结合if和else;2.用异常处理解决。因为时间紧,没时间研究了,大家集思广益一下# 因为博主我的项目只用于hex所以我就注释了asc,大家如果用asc可以注释掉hex#1.如果是Hex发送, 解码得到8e10020090be0c015100008960c200003f003011287d8dresult_recv_data=recv_data[0].hex()#2.如果是ASCII发送,解码得到8E 10 02 00 90 BE 0C 01 51 00 00 89 60 C2 00 00 3F 00 30 11 28 7D 8D# result_recv_data = recv_data[0].decode('utf-8')print(result_recv_data)## 3.关闭套接字udp_socket.close()if __name__ == "__main__":main()
注意事项
- 这里为了显示接收到的数据,进行了解码处理。
- 如果是hex模式发送数据,使用hex解码方式得到的数据是,这些数据还要进一步的处理。
8e10020090be0c015100008960c200003f003011287d8d
ls = []for i in range(len(result_recv_data) // 2):ls.append(result_recv_data[i * 2] + result_recv_data[i * 2 + 1])return ls
才会得到8E 10 02 00 90 BE 0C 01 51 00 00 89 60 C2 00 00 3F 00 30 11 28 7D 8D
- 如果是asc码模式发送数据,使用
.decode('utf-8')
解码得到的数据是8E 10 02 00 90 BE 0C 01 51 00 00 89 60 C2 00 00 3F 00 30 11 28 7D 8D
总结
大家喜欢的话,给个
【Python】接收UDP数据(保姆级图文+附测试工具文件+api例程)相关推荐
- 【安卓】1.修改按钮样式之圆角按钮+按钮图标(保姆级图文+附示例+api例程)
目录 1.按钮图标 1.1获取按钮图标文件 1.2 按钮图标API说明: 1.3 按钮图标基本例程 2.按钮样式文件 2.1 new_button_style.xml 2.2 color.xml 2. ...
- CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)
CAN通讯-使用Python收发CAN数据 配置环境 1.环境配置 1.1安装CAN通讯需要的包 1.2 安装kvaser_drivers以及Kvaser CanKing 2.使用Python收发数据 ...
- 【Python】生成Word写入数据 -操作Excel、Word、CSV(5)(保姆级图文注释+测试代码+api例程)
目录 API说明: 1.创建有标题的 Word例程 2. 创建章节和段落 3. 设置字体和引用 4. 创建项目列表 5. 图片和表格 总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『P ...
- 【Python】excel格式转换操作 -操作Excel、Word、CSV(4)(保姆级图文注释+测试代码+api例程)
目录 预览效果: API说明: 基本例程 总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 预览效果: 可以对字体,颜色.对齐.合并等平时 Excel ...
- 百分制成绩转换五分制F【Python习题】(保姆级图文+实现代码)
目录 题目 描述 输入格式 输出格式 输入输出示例 思路 代码 实现效果 总结 主要内容是校设课程的习题和课外学习的一些习题. 欢迎关注 『Python习题』 系列,持续更新中 欢迎关注 『Pytho ...
- 【网络攻防CTF】Crypto 密码学 python循环多次base64解码题目(保姆级图文)
目录 题目 方法1:手动多次解码 方法2:使用我的小工具自动解码 答案flag 总结 欢迎关注 『网络攻防CTF』 系列,持续更新中 欢迎关注 『网络攻防CTF』 系列,持续更新中 题目 密文: Vm ...
- 【Python黑科技】获取每日一句美句,并定时发送邮件到指定邮箱(保姆级图文+实现代码)
目录 实现效果 实现思路 1.获取每日一句美句 2.定时发送需要接入时间模块 3.邮件发送 实现代码 总结 欢迎关注 『Python黑科技』 系列,持续更新中 欢迎关注 『Python黑科技』 系列, ...
- Ubuntu18.04安装ros(顺利解决 sudo rosdep init 与 rosdep update 存在的问题,附保姆级图文流程)
Ubuntu18.04(Ubuntu20.04)安装ros(顺利解决 sudo rosdep init 与rosdep update 存在的问题,附保姆级图文流程) 前言 安装了很多次,东拼西凑好多博 ...
- 【宝塔面板建站】05. 七牛云存储使用教程 免费备份10G数据(保姆级图文)
目录 实现效果 注册并实名一个七牛云帐号 配置七牛云存储空间 新建对象存储空间 域名管理 解析域名得到CNAME 检查加速域名配置是否成功 获取七牛云密钥 得到2个密钥 宝塔面板配置七牛云 安装七牛云 ...
- yolov5 6.1官方模板TensorRT加速保姆级图文教程
加速的基础流程今年春季已经写好了,可以完美复现加速. 需要补充的是运行export.py的报错,加一句: pip install onnx 这会写教程的时候,电脑是昨天新做的系统,没有python以及 ...
最新文章
- (C++) A+B 输入输出练习IV 每行的第一个数N,表示本行后面有N个数。 如果N=0时,表示输入结束,且这一行不要计算。
- Python的进度条的制作
- 转载:一位资深程序员大牛给予Java初学者的学习路线建议
- php+dreamweaver cs4+css+ajax,Adobe Dreamweaver, CSS, Ajax и PHP
- php开启curl和openssl
- linux常见问题及其解决方案集锦
- springboot和springcloud有什么关系
- C#LeetCode刷题之#441-排列硬币(Arranging Coins)
- PTA17、求指定层的元素个数 (10 分)
- css3:box-shadow
- php检查某个网站,用php开发一个检测某网站是否在正常运行的小模块
- 三点确定一个圆的计算方法
- 三级缓存 SD—内存—网络
- Jquery插件包-jqwidgets
- 微信小程序——如何实现账号的注册、登录?
- OpenCV3.0+VS2015+Win7x64开发环境搭建报错找不到gdi32.lib、opencv_world300d.dll
- xp关闭计算机没有反映,关机很慢—点击“开始—关闭计算机”后过了两三分钟才有反应,但XP其他一切正常,怎么回事?...
- python爬取餐饮数据_使用 Python 分析全国所有必胜客餐厅
- 无法使用此产品的安装源,请确认安装源存在,并且您可以访问它
- div 设置a4大小_javascript – 拉伸div到A4大小
热门文章
- Excel+Word批量发邮件的方法
- 关于2020计算机考研。
- Sagemath | 基于大整数分解的Rabin加密
- excel合并两列内容_【238期】EXCEL扩展思维,一题多解,玩转数据两列合并,你都会?...
- 我家云刷机omv如何更改设置文件夹权限
- Flutter 开源社交电商项目Flutter_Mycommunity_App
- IOS 控制器切换的动画样式
- 怎样安装android设备驱动,如何在电脑安装安卓手机驱动
- Git分支管理Git branch相关参数命令,git branch -v git branch --merged git branch --no-merged git commit -a -m
- PHP虚拟素材资源站源码带支付,素材火源码二开版带码支付源码可以做虚拟资源或源码下载网...