一、消息队列服务器

这里我用到activemq,可到官网下载 http://activemq.apache.org/

1. 若遇到点击apache-activemq-5.16.2\bin\activemq.bat 出现闪退,64位系统请点击apache-activemq-5.16.2\bin\win64\activemq.bat,启动mqtt服务器
ActiveMQ启动闪退的问题可见 https://blog.csdn.net/pavel101/article/details/79460672
2. ActiveMQ 默认用户名和密码
用户名:admin 密码:admin
可以在/conf/users.properties中寻找。
默认登录地址:http://localhost:8161/admin/,这里mqtt默认端口为1883,ip为192.168.1.103

二、封装客户端

 1 import paho.mqtt.client as mqtt
2
3 import logging
4
5 class MqttClient(mqtt.Client):
6
7 def initClient(self, mqttServer, mqttPort, username, password, timeout=10000):
8 logging.basicConfig(level=logging.DEBUG)
9
10 self.mqttServer = mqttServer
11 self.mqttPort = mqttPort
12 self.username_pw_set(username, password=password)
13
14 self.connect(self.mqttServer, self.mqttPort, timeout) # keeplive仅为10000秒
15 self.on_connect = self.on_connect
16
17 def getClient(self):
18 return self.client
19
20 def on_connect(self, client, userdata, flags, rc):
21 linkAddr = client.mqttServer + ":"+ str(client.mqttPort)
22 if rc == 0:
23 logging.info("与mqtt服务器:"+ linkAddr +"连接成功")
24 elif rc == 1:
25 logging.error("协议版本错误")
26 elif rc == 2:
27 logging.error("无效的客户端标识")
28 elif rc == 3:
29 logging.error("服务端无法使用")
30 elif rc == 4:
31 logging.error("与mqtt服务器连接失败: 错误的用户名或密码 ")
32 elif rc == 5:
33 logging.error("登录用户未经授权 ")
34 else:
35 logging.error("与mqtt服务器:%s 连接返回异常结果:%s " % (linkAddr, str(rc)))
36
37 def on_subscribe(self, client, userdata, mid, granted_qos):
38 logging.info("订阅成功: " + str(mid) + " " + str(granted_qos))
39
40 def on_publish(self, client, userdata, mid):
41 logging.info("OnPublish, mid: " + str(mid))

三、下面模拟客户端1和客户端2通信,客户端1发布信息,客户端2接收信息

客户端1代码

 1 #!/usr/bin/python
2 import datetime
3 import json
4 import logging
5 import time
6
7 from mqttService.mqttClient import MqttClient
8
9 #------------------客户端1--------------------
10 # ======================================================
11
12
13 # 服务器地址
14 mqttServer = "192.168.1.103"
15 # 通信端口
16 mqttPort = 1883
17 # 订阅主题
18 devTopic = '/devices/dev1'
19 responseDevTopic= '/7.0/dev1'
20
21
22 # 接收客户端2响应信息
23 def on_message(client, userdata, message):
24 curtime = datetime.datetime.now()
25 strcurtime = curtime.strftime("%Y-%m-%d %H:%M:%S")
26 logging.info("%s: 接收 %s 响应信息:主题:%s 内容:%s" %(strcurtime, mqttServer+":"+str(mqttPort), message.topic, str(message.payload, encoding = "utf-8")))
27
28
29 if __name__ == '__main__':
30 logging.basicConfig(level=logging.DEBUG)
31
32 username = "UserName1"
33 password = "PassWord1"
34
35 client = MqttClient()
36 client.initClient(mqttServer, mqttPort, username, password)
37 client.subscribe(responseDevTopic, qos=0) #订阅主题
38 client.on_message = on_message
39
40 msg = 'hello world'
41 for i in range(1000):
42 client.publish(devTopic, payload=msg , qos=0) #发布信息
43 time.sleep(4)
    client.loop_forever()  # 持续连接

客户端2代码

 #!/usr/bin/python
import datetime
import json
import logging from mqttService.mqttClient import MqttClient #------------------客户端2------------------- # 订阅主题
devTopic = '/devices/#'
# 发布主题

responseDevTopicPrefix = '/7.0/' def on_message(client, userdata, message):
curtime = datetime.datetime.now()
strcurtime = curtime.strftime("%Y-%m-%d %H:%M:%S")
recvMsg = message.payload # 获取发送设备的设备ID
topicArr = str(message.topic).split("/")
topicArr = [item for item in filter(lambda x: x != '', topicArr)] # 去除空串
deviceId = topicArr[1] logging.info("%s: 接收硬件装置 %s 信息:主题: %s 内容: %s" %(strcurtime, deviceId, message.topic, recvMsg)) # 发送响应回硬件终端
client.publish(responseDevTopicPrefix +deviceId, payload="收到数据"+recvMsg, qos=0)if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG) mqttAddr = '192.168.1.103'
mqttPort = 1883 username = "UserName2"
password = "PassWord2"
# 与客户端1通信
client = MqttClient()
client.initClient(mqttAddr, mqttPort, username, password)
client.subscribe(devTopic, qos=0)
client.on_message = on_message
client.loop_start() # 开始监听
# 阻塞主程序
while True:
pass

python mqtt通信(windows)的更多相关文章

  1. MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)

    https://blog.csdn.net/panwen1111/article/details/79245161 目录MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整De ...

  2. 使用 MQTTnet 快速实现 MQTT 通信

    1 什么是 MQTT ? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分.MQT ...

  3. Python环境搭建(windows)

    Python环境搭建(windows) Python简介 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种面向对象.直译式计算机编程语言,具有近二十年的发展历史,成 ...

  4. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  5. 如何实现 C/C++ 与 Python 的通信?

    属于混合编程的问题.较全面的介绍一下,不仅限于题主提出的问题.以下讨论中,Python指它的标准实现,即CPython(虽然不是很严格) 本文分4个部分 1. C/C++ 调用 Python (基础篇 ...

  6. WiFi-ESP8266入门http(3-4)网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信

    网页一键配网(1若为普通wifi直连  2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信 工程连接:https://github.com/Dongvdong/ESP8266_H ...

  7. Fix Python 3 on Windows error Microsoft Visual C++ 14.0 is required

    Fix Python 3 on Windows error Microsoft Visual C++ 14.0 is required Fix the error for Python 3.6 and ...

  8. C/C++ 与 Python 的通信

    作者:Jerry Jho链接:https://www.zhihu.com/question/23003213/answer/56121859来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  9. python MySQLdb在windows环境下的快速安装

    python MySQLdb在windows环境下的快速安装.问题解决方式 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下 ...

随机推荐

  1. 关于Linux的一些基础命令

    今天学习scala语言,在linux系统上运行,发现对Linux的命令不太熟悉,为了熟悉掌握,也便于查询,这些命令主要是为了收藏备用,,希望能帮助到大家 linux20个常用命令是: 1.显示日期的指 ...

  2. ASP.NET Core MVC 入门到精通 - 1. 开发必备工具 (2021)

    环境: .NET 5 ASP.NET Core MVC 1. .NET 5 作为一个资深.NET工程师,说句实话,.NET没落了,在国内更加的没落.之前做过8年node.js/前端,现如今又转回了.N ...

  3. 噪声标签的负训练:ICCV2019论文解析

    噪声标签的负训练:ICCV2019论文解析 NLNL: Negative Learning for Noisy Labels 论文链接: http://openaccess.thecvf.com/co ...

  4. 视频处理单元Video Processing Unit

    视频处理单元Video Processing Unit VPU处理全局视频处理,它包括时钟门.块复位线和电源域的管理. 缺少什么: •完全重置整个视频处理硬件块 •VPU时钟的缩放和设置 •总线时钟门 ...

  5. 系统芯片(SOC)架构- Aviral Mittal

    系统芯片(SOC)架构- Aviral Mittal System on Chip Architecture-Aviral Mittal 此技术是在设计片上系统时考虑体系结构级别的因素.同样,范围是围 ...

  6. 激光雷达Lidar与毫米波雷达Radar:自动驾驶的利弊

    激光雷达Lidar与毫米波雷达Radar:自动驾驶的利弊 Lidar vs Radar: pros and cons for autonomous driving 新型无人驾驶汽车的数量在缓慢增加,各 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载

    在上一篇文章里,我们通过注入sentinel component到apigateway实现了对下游服务的保护,不过受限于目前变更component需要人工的重新注入配置以及重启应用更新componen ...

  8. Java如何使用while和for嵌套循环控制输出数据,使数据奇偶行不同

    /* 题目1 使用Eclipse编写控制台应用程, 使用while循环在控制台打印10行10列的如下图形 □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ...

  9. 【SQLite】教程08-SQLite可视化工具

    推荐使用"SQLiteStudio" 下载地址:http://www.downza.cn/soft/208363.html 设为中文的方法: 最后重启软件即可!

  10. Redis五种基础与三种高级数据结构解析

    记得点赞+关注呦. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis 之所以能脱颖而出很大原因是他数据结构丰富,可以支持多种场景.并且 Redis 的数据结构实现以及应用场景在面 ...