• Python MQTT客户端实现


    1.安装paho-mqtt

    使用Python Package Index (PyPi)

    pip install paho-mqtt

    使用virtualenv

    virtualenv paho-mqtt
    source paho-mqtt/bin/activate
    pip install paho-mqtt

    或者编译源代码

    git clone https://github.com/eclipse/paho.mqtt.python

    使用源码安装

    cd paho.mqtt.python
    python setup.py install

    2. Demo

    发布数据

    # import paho.mqtt.client as mqtt
    import paho.mqtt.publish as publish
    import time
    
    HOST = "127.0.0.1"
    PORT = 61613
    def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        client.subscribe("test")
    
    def on_message(client, userdata, msg):
        print(msg.topic+" "+msg.payload.decode("utf-8"))
    
    if __name__ == '__main__':
        client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
        # client = mqtt.Client(client_id)    # ClientId不能重复,所以使用当前时间
        # client.username_pw_set("admin", "123456")  # 必须设置,否则会返回「Connected with result code 4」
        # client.on_connect = on_connect
        # client.on_message = on_message
        # client.connect(HOST, PORT, 60)
        # client.publish("test", "你好 MQTT", qos=0, retain=False)  # 发布消息
    
        publish.single("test", "你好 MQTT", qos = 1,hostname=HOST,port=PORT, client_id=client_id,auth = {'username':"admin", 'password':"123456"})
    

      

    接收数据

    import paho.mqtt.client as mqtt
    import time
    
    HOST = "127.0.0.1"
    PORT = 61613
    
    def client_loop():
        client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
        client = mqtt.Client(client_id)    # ClientId不能重复,所以使用当前时间
        client.username_pw_set("admin", "123456")  # 必须设置,否则会返回「Connected with result code 4」
        client.on_connect = on_connect
        client.on_message = on_message
        client.connect(HOST, PORT, 60)
        client.loop_forever()
    
    def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        client.subscribe("test")
    
    def on_message(client, userdata, msg):
        print(msg.topic+" "+msg.payload.decode("utf-8"))
    
    if __name__ == '__main__':
        client_loop()
    

      client_id是必须的,并且是唯一的。否则可能会出现如下错误:WinError 10054] 远程主机强迫关闭了一个现有的连接。

     
  • 相关阅读:
    服务端增加WCF服务全局异常处理机制
    ASP.NET MVC异常处理方案
    [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
    Asp.Net Mvc的几个小问题
    C# 多线程之Thread类
    C#泛型
    c#public、private、protected、internal、protected internal
    ASP.NET并发处理
    GDB调试器的使用
    【多媒体封装格式详解】---MKV
  • 原文地址:https://www.cnblogs.com/saryli/p/9719175.html
Copyright © 2020-2023  润新知