MQTT 服务器搭建,python控制消息发布和接收
目的:实现手机终端和PC无线通信,然后做一些测试任务,经过查找资料,首先实现了PC之间的消息发送和接收实现步骤如下:
1. 搭建MQTT服务器
我选用的是EMQ,https://www.emqx.io/cn/downloads
下载后解压,打开cmd终端,切到,解压文件/bin路径下,执行emqx.cmd start 启动服务
注意:启动这个服务的时候可能会报错(XXX没有权限),只需要以管理员权限打开终端,就能解决这个问题
2. 安装客户端UI软件(客户端可以在不同的PC上,服务器和客户端所在的同一网段)
本步骤目的是图形界面验证服务和客户端可用。代码操作(不需要这个客户端)在第3步,
下载 MQTT Utility windows客户端,https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.1.1/
解压,然后双击打开paho.exe,显示界面如下,服务器地址填写,服务器地址,比如:tcp://ip地址:端口号
image- 服务器搭建好之后python代码:
分两部分,一部分是实时监听接收,一部分是发送消息端,服务器只作为消息的中转。
监听端
import sys
import os
import time
import paho.mqtt.client as mqtt
sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
sys.path.append("..")
REPORT_TOPIC = 'test' # 主题
def on_connect(client, userdata, flags, rc):
print('connected to mqtt with resurt code ', rc)
client.subscribe(REPORT_TOPIC) # 订阅主题
def on_message(client, userdata, msg):
message = msg.payload.decode()
print(message)
def server_conenet(client):
client.on_connect = on_connect # 启用订阅模式
client.on_message = on_message # 接收消息
client.connect("服务器IP地址", 1883, 60) # 链接
# client.loop_start() # 以start方式运行,需要启动一个守护线程,让服务端运行,否则会随主线程死亡
client.loop_forever() # 以forever方式阻塞运行。
def server_stop(client):
client.loop_stop() # 停止服务端
sys.exit(0)
def server_main():
client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
client = mqtt.Client(client_id, transport='tcp')
server_conenet(client)
if __name__ == '__main__':
# 启动监听
server_main()
消息发送端
import paho.mqtt.client as mqtt
client = mqtt.Client()
# 参数有 Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp")
client.connect("度武器IP地址", 1883, 60) # 连接服务器,端口为1883,维持心跳为60秒
client.publish('test', 'test string',1)
上述两端代码连接的IP地址需要修改为服务器所在PC的IP地址
首先把监听的代码运行起来,时刻监听主题为“test”的消息,
然后运行发送消息的代码,可以查看到监听端已经捕获到发送的消息
image.png
参考:
https://www.jianshu.com/p/b76dbc675141
https://blog.csdn.net/sinat_32651363/article/details/87876978
主机发消息Android端接收,实现无线测试可查看下边连接
MQTT服务端python和移动终端Android通信,实现无线测试