一、消息队列服务器

这里我用到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. .NET平台系列15 .NET5的吊炸天性能改进

    系列目录     [已更新最新开发文章,点击查看详细] .NET5的性能改进测试功能 Benchmark.NET现在是衡量.NET代码性能的规范工具,可轻松分析代码段的吞吐量和分配. .NET5的性能 ...

  2. 日常Bug排查-消息不消费

    日常Bug排查-消息不消费 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 某天下午,在笔者研究某个问题正high的时候.开 ...

  3. 浅析IOC 和 DI

    学习过spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  4. 在Docker中安装MongoDB

    在Docker中安装MongoDB docker run -p 27017:27017 -v /data/mongodb:/data/db --name mongodb -d mongo --auth ...

  5. Step By Step(Lua基础知识)

    Step By Step(Lua基础知识) 一.基础知识:    1. 第一个程序和函数:    在目前这个学习阶段,运行Lua程序最好的方式就是通过Lua自带的解释器程序,如:    /> l ...

  6. Vue全家桶之组件化开发

    Vue全家桶之组件化开发   一.组件 组件 (Component) 是 Vue.js 最强大的功能之一 组件可以扩展 HTML 元素,封装可重用的代码   二. 组件注册 2.1 全局注册 Vue. ...

  7. TensorFlow+TVM优化NMT神经机器翻译

    TensorFlow+TVM优化NMT神经机器翻译 背景 神经机器翻译(NMT)是一种自动化的端到端方法,具有克服传统基于短语的翻译系统中的弱点的潜力.本文为全球电子商务部署NMT服务. 目前,将Tr ...

  8. fiddler修改请求包和返回包

    设置好过滤后,找到需要修改的包,按如下步骤进行包的数据修改1.设置"禁止上传"(禁止XX为本人自己理解,专业术语不记得了,高手可留言笔者重新修订博文),打上断点,如下标志就是在请求 ...

  9. python常识系列20-->python利用xlutils修改表格内容

    前言 世上的事,只要肯用心去学,没有一件是太晚的.要始终保持敬畏之心,对阳光,对美,对痛楚. 一.xlutils是什么? 是一个提供了许多操作修改excel文件方法的库: 属于python的第三方模块 ...

  10. IDEA骚技巧

    1. var 声明 2. null 判空 3. notnull 判非空 4. nn 判非空 5. for 遍历 6. fori 带索引的遍历 7. not 取反 8. if 条件判断 9. cast ...