目录

  • 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秒钟一直发送数据包,我们这个测试程序是接收一次数据就会结束,所以后期可以封装成函数多次循环,接受更多数据。


成功接收数据后的效果截图

接收数据流程:

  1. 创建客户端套接字
  2. 绑定本地信息(ip和port)
  3. 接收数据
  4. 关闭套接字
# @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. 【安卓】1.修改按钮样式之圆角按钮+按钮图标(保姆级图文+附示例+api例程)

    目录 1.按钮图标 1.1获取按钮图标文件 1.2 按钮图标API说明: 1.3 按钮图标基本例程 2.按钮样式文件 2.1 new_button_style.xml 2.2 color.xml 2. ...

  2. CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)

    CAN通讯-使用Python收发CAN数据 配置环境 1.环境配置 1.1安装CAN通讯需要的包 1.2 安装kvaser_drivers以及Kvaser CanKing 2.使用Python收发数据 ...

  3. 【Python】生成Word写入数据 -操作Excel、Word、CSV(5)(保姆级图文注释+测试代码+api例程)

    目录 API说明: 1.创建有标题的 Word例程 2. 创建章节和段落 3. 设置字体和引用 4. 创建项目列表 5. 图片和表格 总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『P ...

  4. 【Python】excel格式转换操作 -操作Excel、Word、CSV(4)(保姆级图文注释+测试代码+api例程)

    目录 预览效果: API说明: 基本例程 总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 预览效果: 可以对字体,颜色.对齐.合并等平时 Excel ...

  5. 百分制成绩转换五分制F【Python习题】(保姆级图文+实现代码)

    目录 题目 描述 输入格式 输出格式 输入输出示例 思路 代码 实现效果 总结 主要内容是校设课程的习题和课外学习的一些习题. 欢迎关注 『Python习题』 系列,持续更新中 欢迎关注 『Pytho ...

  6. 【网络攻防CTF】Crypto 密码学 python循环多次base64解码题目(保姆级图文)

    目录 题目 方法1:手动多次解码 方法2:使用我的小工具自动解码 答案flag 总结 欢迎关注 『网络攻防CTF』 系列,持续更新中 欢迎关注 『网络攻防CTF』 系列,持续更新中 题目 密文: Vm ...

  7. 【Python黑科技】获取每日一句美句,并定时发送邮件到指定邮箱(保姆级图文+实现代码)

    目录 实现效果 实现思路 1.获取每日一句美句 2.定时发送需要接入时间模块 3.邮件发送 实现代码 总结 欢迎关注 『Python黑科技』 系列,持续更新中 欢迎关注 『Python黑科技』 系列, ...

  8. Ubuntu18.04安装ros(顺利解决 sudo rosdep init 与 rosdep update 存在的问题,附保姆级图文流程)

    Ubuntu18.04(Ubuntu20.04)安装ros(顺利解决 sudo rosdep init 与rosdep update 存在的问题,附保姆级图文流程) 前言 安装了很多次,东拼西凑好多博 ...

  9. 【宝塔面板建站】05. 七牛云存储使用教程 免费备份10G数据(保姆级图文)

    目录 实现效果 注册并实名一个七牛云帐号 配置七牛云存储空间 新建对象存储空间 域名管理 解析域名得到CNAME 检查加速域名配置是否成功 获取七牛云密钥 得到2个密钥 宝塔面板配置七牛云 安装七牛云 ...

  10. yolov5 6.1官方模板TensorRT加速保姆级图文教程

    加速的基础流程今年春季已经写好了,可以完美复现加速. 需要补充的是运行export.py的报错,加一句: pip install onnx 这会写教程的时候,电脑是昨天新做的系统,没有python以及 ...

最新文章

  1. (C++) A+B 输入输出练习IV 每行的第一个数N,表示本行后面有N个数。 如果N=0时,表示输入结束,且这一行不要计算。
  2. Python的进度条的制作
  3. 转载:一位资深程序员大牛给予Java初学者的学习路线建议
  4. php+dreamweaver cs4+css+ajax,Adobe Dreamweaver, CSS, Ajax и PHP
  5. php开启curl和openssl
  6. linux常见问题及其解决方案集锦
  7. springboot和springcloud有什么关系
  8. C#LeetCode刷题之#441-排列硬币(Arranging Coins)
  9. PTA17、求指定层的元素个数 (10 分)
  10. css3:box-shadow
  11. php检查某个网站,用php开发一个检测某网站是否在正常运行的小模块
  12. 三点确定一个圆的计算方法
  13. 三级缓存 SD—内存—网络
  14. Jquery插件包-jqwidgets
  15. 微信小程序——如何实现账号的注册、登录?
  16. OpenCV3.0+VS2015+Win7x64开发环境搭建报错找不到gdi32.lib、opencv_world300d.dll
  17. xp关闭计算机没有反映,关机很慢—点击“开始—关闭计算机”后过了两三分钟才有反应,但XP其他一切正常,怎么回事?...
  18. python爬取餐饮数据_使用 Python 分析全国所有必胜客餐厅
  19. 无法使用此产品的安装源,请确认安装源存在,并且您可以访问它
  20. div 设置a4大小_javascript – 拉伸div到A4大小

热门文章

  1. Excel+Word批量发邮件的方法
  2. 关于2020计算机考研。
  3. Sagemath | 基于大整数分解的Rabin加密
  4. excel合并两列内容_【238期】EXCEL扩展思维,一题多解,玩转数据两列合并,你都会?...
  5. 我家云刷机omv如何更改设置文件夹权限
  6. Flutter 开源社交电商项目Flutter_Mycommunity_App
  7. IOS 控制器切换的动画样式
  8. 怎样安装android设备驱动,如何在电脑安装安卓手机驱动
  9. Git分支管理Git branch相关参数命令,git branch -v git branch --merged git branch --no-merged git commit -a -m
  10. PHP虚拟素材资源站源码带支付,素材火源码二开版带码支付源码可以做虚拟资源或源码下载网...