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()