python写的收Udp消息后,再发到 MQTT 的例子

收到Udp消息后,再发到 MQTT 的例子

完整代码

udp2mqtt.py

import json
import logging
import random
import socket
import time
import paho.mqtt.client as mqtt_client

BROKER = '*******.ala.cn-hangzhou.emqxsl.cn'
PORT = 8084
TOPIC = "python-mqtt/wss"
CLIENT_ID = f'python-mqtt-wss-pub-{random.randint(0, 1000)}'
USERNAME = '********'
PASSWORD = '********'


UDP_IP = "localhost"  # 本地IP地址
UDP_PORT = 6789       # 本地端口号

FLAG_EXIT = False

def on_connect(client, userdata, flags, rc):
    if rc == 0 and client.is_connected():
        print("Connected to MQTT Broker!")
    else:
        print(f'Failed to connect, return code {rc}')

def connect_mqtt():
    client = mqtt_client.Client(client_id=CLIENT_ID, transport='websockets', callback_api_version=mqtt_client.CallbackAPIVersion.VERSION1)
    client.tls_set(ca_certs='./emqxsl-ca.crt')
    client.username_pw_set(USERNAME, PASSWORD)
    client.on_connect = on_connect
    client.connect(BROKER, PORT, keepalive=120)
    return client

def udp_server():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind((UDP_IP, UDP_PORT))

    client = connect_mqtt()
    client.loop_start()

    while not FLAG_EXIT:
        data, addr = sock.recvfrom(1024)  # buffer size is 1024 bytes
        print(f"Received data from {addr}: {data}")
        if client.is_connected():
            client.publish(TOPIC, data)
        else:
            print("MQTT client is not connected. Cannot publish UDP data.")

    client.loop_stop()
    sock.close()

if __name__ == '__main__':
    logging.basicConfig(format='%(asctime)s - %(levelname)s: %(message)s', level=logging.DEBUG)
    udp_server()

 

发udp消息的例子

import socket

# 设置目标地址和端口
server_address = ('localhost', 6789)

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

try:
    # 发送数据
    message = 'aaaaaaa'
    print(f"发送:{message}")
    sent = sock.sendto(message.encode(), server_address)

finally:
    # 关闭套接字
    print("关闭套接字")
    sock.close()

 

posted @ 2024-04-10 10:25  海乐学习  阅读(24)  评论(0编辑  收藏  举报