Conectividad cliente MQTT con .Net

Texto copiado
Introducción

Esta documentación ofrece una guía completa para conectarMQTT clientesnuestraMQTT broker(CrystalMQ) o cualquier corredor de su elección usando .NET. Proporciona instrucciones paso a paso, comenzando por establecer el desarrollo medio ambiente y abarca el establecimiento conexiones vía TCP, puertos seguros y protocolos WebSocket. Además, incluye directrices para configurarautenticación MQTT, asegurar una conexión segura y fiable entre su Aplicaciones .NET y el corredor.

Pre-requisitos

Antes de empezar, asegúrese de que tiene lo siguiente:

  • . NET SDK instalado en su máquina.
  • Una instancia de Broker MQTT corriendo.

Instalación de dependencia

Para comenzar, configurar su entorno de desarrollo instalando lo necesario. NET bibliotecas. Usted necesitará la biblioteca MQTT .NET para facilitarMQTTcomunicación en tu. Aplicación NET.

dotnet añadir paquete MQTTnet -versión 4.3.6.1152

Crear un nuevo . Aplicación de consola NET.
Windows:

dotnet nueva consola -n CrystalMQ

Conexión con MQTT Broker

Esta sección tiene fragmentos de código de varias maneras de conectarse a MQTT Broker. Garantizar que MQTT Broker soporta el tipo de conexión que le gustaría utilizar. Además, obtener el correspondiente parámetros de conexión the MQTT Broker (Address, Port, Username/Password, CA Certificate)

MQTT Over TCP

Utilice el siguiente código para conectar al cliente sobre TCP. Define el Macro ADDRESS utilizando los parámetros de conexión de MQTT Broker.

Para MQTT 3.3.1 :

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqt-broker.bevywise.com", 1883)
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT broker.");
});
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);

Para MQTT 5 :

// Crear cliente
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqt-broker.bevywise.com", 1883)
. ConProtocolVersion(MQTTnet.Formatter.MqtProtocolVersion.V500) // Uso Versión MQTT 5.0
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT broker.");
});
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);

MQTT sobre TLS / SSL

Utilice el siguiente código para conectarse de forma segura a MQTT Broker sobre TLS. Define el Macro ADDRESS utilizando los parámetros de conexión de MQTT Broker.

// Define el Macro ADDRESS
#define ADDRESS "public-mqtt-broker.bevywise.com:8883"
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_", 10)
. ConTcpServer(GetHostDesdeAddress(ADDRESS), GetPortDesdeAddress(ADDRESS)
.ConTls(nuevo MqttClientOptionsBuilderTlsParameters
{}
UseTls = verdadero,
Certificados = nueva lista(), // Opcionalmente agregue su certificados aquí
AllowUntrustedCertificates = true, // Set to false in production
IgnoreCertificate ChainErrors = verdadero, // Set to false in production
IgnoreCertificate Errores de revocación = verdadero // Set to false in producción
})
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT broker.");
});
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);

Establecer parámetros TLS antes de llamar al MQTTClient_connect para conectar al cliente al MQTT Broker seguro sobre TLS.

Si el MQTT Broker es hospedado en un servidor de confianza y la verificación del servidor no es necesario, el siguiente código se puede utilizar para configurar Opciones TLS:

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_", 10)
. ConTcpServer(GetHostDesdeAddress(ADDRESS), GetPortDesdeAddress(ADDRESS)
.ConTls(nuevo MqttClientOptionsBuilderTlsParameters
{}
UseTls = verdadero,
AllowUntrustedCertificates = true, // Permitir certificados no fiables
IgnoreCertificate ChainErrors = verdadero, // Ignorar errores de cadena de certificados
IgnoreCertificateRevocation Errores = verdadero // Ignorar la revocación del certificado errores
})
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT broker.");
});
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);

Si el MQTT Broker tiene el certificado de servidor emitido por un CA con confianza, entonces el Certificado de Servidor se puede verificar utilizando:

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_", 10)
. ConTcpServer(GetHostDesdeAddress(ADDRESS), GetPortDesdeAddress(ADDRESS)
.ConTls(nuevo MqttClientOptionsBuilderTlsParameters
{}
UseTls = verdadero,
Certificados = nueva lista(), // Opcionalmente añadir cliente certificados aquí
Valor de certificado Handler = context =
{}
// Lógica de validación del certificado de servidor personalizado
contexto de retorno. SslPolicy Errores == System.Net.Security.SslPolicyErrors. Ninguna;
}
AllowUntrustedCertificates = false, // No permitas que no se fije certificados
IgnoreCertificate ChainErrors = falso, // No ignore la cadena de certificados Errores
IgnoreCertificate Errores de revocación = falsos // No ignore el certificado errores de revocación
})
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT broker.");
});
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);

Si el MQTT Broker tiene un certificado de servidor auto-firmado, entonces el certificado de servidor puede Ser verificado utilizando el certificado de raíz obtenido del Bronker MQTT:

// Cargar el certificado raíz
var rootCert = nuevo X509Certificate2("path_of _the_root_file");
// Configurar las opciones del cliente MQTT
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqt-broker.bevywise.com", 8883)
.ConCredentials("highlysecure", "N4xnpPTru43T8Lmk") // Agregar nombre de usuario y contraseña
.ConTls(nuevo MqttClientOptionsBuilderTlsParameters
{}
UseTls = verdadero,
Certificados = nueva lista{ rootCert},
AllowUntrustedCertificates = true, // Cadena de certificados deshabilitables validación
IgnoreCertificate ChainErrors = verdadero, // Ignorar la cadena de certificados Errores
IgnoreCertificate Errores de revocación = verdadero // Certificado de diagnóstico errores de revocación
})
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT broker.");
});
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);

MQTT sobre WebSocket

Define la dirección MQTT Broker como esta para conectar al cliente en WebSocket.

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt") // Use WebSocket server URI
.Build();

MQTT sobre Secure WebSocket

Utilice el siguiente código para conectar al cliente sobre Secure WebSocket. Establecer opciones TLS como se indica en la sección MQTT Más TLS.

Define el Macro ADDRESS utilizando los parámetros de conexión de MQTT Broker.

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConWebSocketServer("ws://public-mqtt-broker.bevywise.com:11443/mqtt") // Use WebSocket server URI
.Build();

Configuración de MQTT Autenticación

Para conectarse a MQTT Broker que requiere MQTT Usuario y MQTT Contraseña para autenticación, añadir a nombre de usuario y contraseña a las opciones de conexión como esta:

// Configurar las opciones del cliente MQTT
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqt-broker.bevywise.com", 1883)
.ConCredentials("nombre de usuario", "password") // Agregar nombre de usuario y contraseña
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT broker.");
});
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);

Características avanzadas

Configuración de la última voluntad

Configurar elÚltima Voluntad y Testamentofunción para especificar un mensaje que el corredor publicará si el cliente inesperadamente desconecta. Esto ayuda a informar a otros suscriptores del estado del cliente desconectado.

Utilice el siguiente código para establecer Last Will en las opciones de conexión:

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqtt-broker.bevywise.com", 1883) // Utilice su broker dirección y puerto
. ConWillMessage(new MqtApplicationMessageBuilder()
.ConTema("will/topic")
.ConPayload("Client1 se ha desconectado inesperadamente")
. ConQualityOfServiceLevel(MqttCalityOfServiceLevel.AtLeastOnce)
.ConRetainFlag(verdad)
.Build())
.Build();

Ajuste Mantener Alive

MQTTmantiene conexiones cliente-broker con unmantener la calmamecanismo. Ajuste el intervalo de mantenimiento para controlar cómo con frecuencia el cliente envía mensajes PINGREQ al corredor.

Modifique el código de abajo para satisfacer sus requisitos:

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqtt-broker.bevywise.com", 1883) // Utilice su dirección de corredor y puerto
. ConWillMessage(new MqtApplicationMessageBuilder()
.ConTema("will/topic")
.ConPayload("Client1 se ha desconectado inesperadamente")
. ConQualityOfServiceLevel(MqttCalityOfServiceLevel.AtLeastOnce)
.ConRetainFlag(verdad)
.Build())
.Build();

Configuración de la Persistencia de Sesión

Datos del período de sesiones de unMQTT Clienteincluir las Suscripciones hechas por el Cliente y los datos que el El cliente recibiría con QoS]0. El cliente puede conseguir elMQTT Brokeralmacenar sus datos de sesión a través de las conexiones.

MQTT 3.1.1 Los clientes pueden establecer sesión limpia = 0 para solicitar el Broker MQTT para mantener su período de sesiones información almacenada entre conexiones.

Para MQTT 3.1.1 :

var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_", 10)
. ConTcpServer("public-mqtt-broker.bevywise.com", 1883) // Utilice su dirección de corredor y puerto
.ConCleanSession(false) // Establecer CleanSession para falso para mantener sesión información
. ConProtocolVersion(MQTTnet.Formatter.MqtProtocolVersion.V311) // Use Versión MQTT 3.1.1
.Build();

MQTT 5 Los clientes pueden establecer Clean Start = 0 y Session Expiry Interval = 'N' para solicitar al MQTT Broker que mantenga su información de sesión almacenada en conexiones para 'N' segundos.

Para MQTT 5 :

var session Intervalo de gastos = 3600; // Intervalo de expiración del período de sesiones fijado a 3600 segundos (1 hora)
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_", 10)
. ConTcpServer("public-mqtt-broker.bevywise.com", 1883) // Utilice su dirección de corredor y puerto
.ConCleanStart(false) // Set CleanStart a false
. WithSessionExpiryInterval(uint)sessionExpiryInterval) // Set Session Intervalo de carga
. ConProtocolVersion(MQTTnet.Formatter.MqtProtocolVersion.V500) // Uso Versión MQTT 5.0
.Build();

Configuración Máxima Tamaño del paquete

MQTT5 Client puede solicitar el MQTT Broker para enviar sólo paquetes de datos menos que un tamaño específico por establecerlo así:

Para el MQTT 5:

var maxPacketSize = 1024; // Ejemplo: Establecer el tamaño máximo del paquete a 1024 bytes
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_", 10)
. ConTcpServer("public-mqtt-broker.bevywise.com", 1883) // Utilice su dirección de corredor y puerto
. ConReceiveMaximum(maxPacketSize) // Juego RecibirMaximum para limitar el paquete tamaño
. ConProtocolVersion(MQTTnet.Formatter.MqtProtocolVersion.V500) // Uso Versión MQTT 5.0
.Build();

Publish

Envío de datos

Distribución eficiente de los datos a múltiples suscriptores por publicarlos a los designados temas con el siguiente fragmento de código:

Para MQTT 3.1.1 :

mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT Broker."); // Publicar un mensaje
var mensaje = nuevo MqtApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("Hola CrystalMQ")
. ConExactlyOnceQoS()
.ConRetainFlag()
.Build();
await mqttClient.PublishAsync(message);
Consola.WriteLine("Message published.");
});

Para MQTT 5 :

mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT Broker.");
// Publicar un mensaje
var mensaje = nuevo MqtApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("Hola CrystalMQ")
. ConQualityOfServiceLevel(MQTTnet.Protocol.MqtQualityOfServiceLevel.ExactlyOnce)
.ConRetainFlag(verdad)
.Build();
var result = await mqtClient. PublishAsync(message);
Consola.WriteLine($"Mensaje publicado (Resultado: {result.ReasonString})).
});

Configuración de mensajes retenidos

Permitir la bandera de retención al publicar un mensaje para asegurar que el corredor almacena la último mensaje para cada tema. Esto garantiza que los nuevos suscriptores reciban el mensaje más reciente conectando.

Para implementar esto, utilice el siguiente fragmento de código:

var mensaje = nuevo MqtApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("Hola CrystalMQ")
. ConQualityOfServiceLevel(MQTTnet.Protocol.MqtQualityOfServiceLevel.ExactlyOnce)
.ConRetainFlag(true) // Activar la bandera de retención
.Build();

Especificación de los niveles de QoS

MQTT proporciona tres niveles de calidad de servicio (QoS) para la entrega de mensajes:

  • QoS 0 (Al menos una vez)
  • QoS 1 (Al menos una vez)
  • QoS 2 (Exactamente una vez)

Especifique el nivel QoS requerido al publicar MQTT mensajes utilizando este código:

// Publicar un mensaje con QoS 0
var messageQoS0 = nuevo MqttApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("QoS 0: Hola CrystalMQ")
. ConQualityOfServiceLevel(MQTTnet.Protocol.MqtQualityOfServiceLevel.AtMostOnce)
.ConRetainFlag(true) // Retain flag se puede configurar si es necesario
.Build();
// Publicar un mensaje con QoS 1
var messageQoS1 = nuevo MqttApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("QoS 1: Hola CrystalMQ")
. ConQualityOfServiceLevel(MQTTnet.Protocol.MqtQualityOfServiceLevel.AtLeastOnce)
.ConRetainFlag(true) // Retain flag se puede configurar si es necesario
.Build();
// Publicar un mensaje con QoS 2
var messageQoS2 = nuevo MqtApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("QoS 2: Hola CrystalMQ")
. ConQualityOfServiceLevel(MQTTnet.Protocol.MqtQualityOfServiceLevel.ExactlyOnce)
.ConRetainFlag(true) // Retain flag se puede configurar si es necesario
.Build();

Intervalo de viaje

La propiedad 'intervalo de caducidad del mensaje' establece la duración de la vida del mensaje en segundos; si sin entrega dentro de este tiempo, el corredor lo descarta. MQTT5 admite esta función. MQTT5 Los clientes pueden configurar esto mientras publican datos.

Para MQTT 5 :

var mensaje = nuevo MqtApplicationMessageBuilder()
.Con Tema("test/topic")
.ConPayload("Hola, MQTT!")
. ConMessageExpiryInterval(300) // 300 segundos = 5 minutos
.Build();

Tema Alias

La propiedad 'Topic Alias' permite a los clientes utilizar un breve alias en lugar de un completo nombre del tema, reducir el tamaño del paquete de mensajes y mejorar la eficiencia de la red.

Para MQTT 5 :

var mensaje = nuevo MqtApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("Hola, CrystalMQ")
.ConTemaAlias(1) // Alias para 'cmq/topic '
.Build();

Propiedades asociadas con MQTT PUBLISH mejorar el manejo de mensajes, proporcionando contexto o instrucciones para corredores y clientes. Estas propiedades, incluyendo intervalos de expiración de mensajes y alias tópicos, optimizar la entrega de mensajes y ancho de banda de red.

Suscríbete

Suscribirse al filtro del tema

Para recibir datos publicados por otros clientes, este cliente tiene que Suscríbete a un Filtro de Tema igualado como este:

mqttClient.UseConnectedHandler(async e =
{}
Consola.WriteLine("Connected successfully with MQTT Broker.");
// Suscribirse a un tema
await mqttClient.SubscribeAsync(new
MQTTnet.Client.Subscribing.MqtClientSubscribeOptionsBuilder()
.ConTopicFilter(f = título f.WithTopic("cmq/topic")).Build());
Consola.WriteLine("Suscrito al tema.");
});

Este filtro de tema puede coincidir con un tema exacto o puede tener como # y +

Datos de recepción

Para recibir los datos enviados para las suscripciones, es necesario definir una función callback así:

mqttClient.UseApplicationMessageReceivedHandler(e = confianza
{}
Consola.WriteLine($"Recibido mensaje sobre tema
ApplicationMessage.
{Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
});

Suscripción de Temas

Para dejar de recibir actualizaciones de un tema, utilice el código proporcionado para darse de baja.

// Unsubscribe del topicawait
mqttClient.UnsubscribeAsync("cmq/topic");
Consola.WriteLine("Unsubscribed from topic.");

Desconectar al cliente

Asegurar una terminación adecuada de la conexión de su cliente con el corredor para evitar problemas y fugas de recursos en ambas partes, manteniendo así la estabilidad del sistema.

Utilice el siguiente código para desconectar al cliente del broker:

mqttClient.UseDisconnectedHandler(async e =
{}
Consola.WriteLine("Disconnected from MQTT broker.");
// Opcionalmente, maneje la lógica de reconexión aquí
});
await mqttClient.DisconnectAsync();

Construcción de su lógica de negocio

Usted tiene la oportunidad de desarrollar y personalizar su propia lógica de negocio intrincada dentro de este entorno, adaptarlo precisamente a sus necesidades y objetivos específicos.

Aplicación de las mejores prácticas

Gestión única de identificación del cliente

Asignar un ID de cliente distinto a cada dispositivo para una identificación adecuada. En privado casos, asignar IDs únicas a clientes individuales. En entornos compartidos, adjunta un azar string to each client ID to ensure uniqueness.

Diseño de datos

Planifique su estructura de datos con antelación. Ya sea tratar con texto o Datos o números con formato JSON, asegura un diseño eficaz de datos que se adapte a su aplicación / maleta/necesidad.

Manejo de error robusto

Implementar una gestión de errores sólida para manejar fallos de conexión MQTT, suscripción problemas, y mensajes publicando errores eficazmente.

Verificación de credenciales

Guardar información confidencial como nombres de usuario, contraseñas y ID de cliente por no codificarlos duros en su código fuente. Utilice variables de entorno o archivos de configuración seguros en su lugar.

Pruebas periódicas " Monitoreo

Prueba continuamente la comunicación de MQTT y monitorea métricas de clientes como conexión status, message throughput, and error rates to quickly identify and fix issues.

Optimización de la gestión de las sesiones

Elija entre sesiones limpias y persistentes ( " limpias: verdaderas " o " limpias: falsas " ) sobre su necesidad de retener suscripciones y mensajes queued a través de las conexiones cliente.

Reconnect on Disconnect

Agregar código para intentar la reconexión con el MQTT Broker cuando hay un inesperado desconexión. Esto asegurará que su cliente permanezca conectado y no pierda cualquier dato.

Descargar Código

Descargar el código completo para el cliente que utiliza . NET MQTT Biblioteca del cliente para conectarse con nuestro corredor o cualquier corredor de su elección.

Para MQTT 3.1.1 :

mediante el Sistema;
usando System. Colecciones. Genérico;
utilizando System.Security.Cryptography.X509Certificates;
usando System. Texto;
usando System. Continúo. Tareas;
utilizar MQTTnet;
usando MQTTnet.Client
Programa de clases
{}
static async Task Main(string[] args)
{}
// Cargar el certificado raíz
//var rootCert = nuevo X509Certificate2("path_of_the_root_file");
// Configurar las opciones del cliente MQTT
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqt-broker.bevywise.com", 1883) // Activar TLS cambiar puerto 8883
//.ConWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt") // Utilice WebSocket servidor URI y Habilitar TLS cambiar puerto 11443
// .ConCredentials("nombre de usuario", "password") // Agregar nombre de usuario y contraseña
//
// .ConTls(nuevo MqttClientOptionsBuilderTlsParameters
/ {
// UseTls = verdadero,
// Certificados = nueva lista{ rootCert},
// Permiso no confiadoCertificates = verdadero, // Cadena de certificados deshabilitables validación
// IgnoreCertificate ChainErrors = verdadero, // Ignorar la cadena de certificados Errores
// IgnoreCertificate Errores de revocación = verdadero // Certificado de diagnóstico errores de revocación
}
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
// Eventos del cliente
mqttClient.ConnectedAsync += async e =
{}
Consola.WriteLine("Connected successfully with MQTT Broker.");
// Suscribirse a un tema
await mqttClient.SubscribeAsync(new MqttClientSubscribeOptionsBuilder(). ConTopicFilter(f = confianza f.WithTopic("cmq/topic")).Build());
Consola.WriteLine("Suscrito al tema.");
// Publicar un mensaje
var mensaje = nuevo MqtApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("Hola CrystalMQ")
.Build();
await mqttClient.PublishAsync(message);
Consola.WriteLine("Message published.");
};
mqttClient.DisconnectedAsync += async e =
{}
Consola.WriteLine("Disconnected from MQTT Broker.");
await Task.Delay(TimeSpan.fromSeconds(5));
Pruebe
{}
await mqttClient.ConnectAsync(options);
}
captura
{}
Consola.WriteLine("Reconnecting failed.");
}
};
mqttClient.ApplicationMessageRecibidoAsync += e =
{} Consola.WriteLine($"Recibido mensaje: {System.Text.Encoding.UTF8.GetString(e.ApplicationMesage.Payload)}");
Tareas de retorno. Tareas;
};
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);
// Mantenga la aplicación en funcionamiento
Consola.WriteLine("Press key to exit");
Consola.ReadLine();
cadena estática privada GenerateClient Id (prefijo de cuerda, longitud de entrada)
{}
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var random = nuevo Random();
Var al azar Chars = new char[length];
para (int i = 0; i)
{}
randomChars[i] = chars[random.Next(chars.Length)];
}
volver prefijo + nueva cadena (cámaras de la sabiduría);
}
}

Para MQTT 5 :

mediante el Sistema;
usando System. Colecciones. Genérico;
utilizando System.Security.Cryptography.X509Certificates;
usando System. Texto;
usando System. Continúo. Tareas;
utilizar MQTTnet;
usando MQTTnet.Client;
Programa de clases
{}
static async Task Main(string[] args)
{}
var options = nuevo MqtClientOptionsBuilder()
. ConClientId(GenerateClientId("crystalmq_",10))
. ConTcpServer("public-mqt-broker.bevywise.com", 1883)
//.ConWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt")
// .ConCredentials("nombre de usuario", "password") // Agregar nombre de usuario y contraseña
. ConProtocolVersion(MQTTnet.Formatter.MqtProtocolVersion.V500) //si usted use la versión mqtt 5. nota: TLS no admite la versión 5
.Build();
// Crear cliente MQTT
var factory = nuevo MqttFactory();
var mqttClient = factory.CreateMqtClient();
// Eventos del cliente
mqttClient.ConnectedAsync += async e =
{}
Consola.WriteLine("Connected successfully with MQTT Broker.");
// Suscribirse a un tema
await mqttClient.SubscribeAsync(new MqttClientSubscribeOptionsBuilder(). ConTopicFilter(f = confianza f.WithTopic("cmq/topic")).Build());
Consola.WriteLine("Suscrito al tema.");
// Publicar un mensaje
var mensaje = nuevo MqtApplicationMessageBuilder()
.ConTema("cmq/topic")
.ConPayload("Hola CMQ")
. ConQualityOfServiceLevel(MQTTnet.Protocol.MqtQualityOfServiceLevel.ExactlyOnce)
.ConRetainFlag(verdad)
.Build();
await mqttClient.PublishAsync(message);
Consola.WriteLine("Message published.");
};
mqttClient.DisconnectedAsync += async e =
{} Consola.WriteLine("Disconnected from MQTT Broker.");
await Task.Delay(TimeSpan.fromSeconds(5));
Pruebe
{}
await mqttClient.ConnectAsync(options);
}
captura
{}
Consola.WriteLine("Reconnecting failed.");
}
};
mqttClient.ApplicationMessageRecibidoAsync += e =
{}
Consola.WriteLine($"Recibido mensaje: {System.Text.Encoding.UTF8.GetString(e.ApplicationMesage.Payload)}");
Tareas de retorno. Tareas;
};
// Conectarse con el corredor MQTT
await mqttClient.ConnectAsync(options);
// Mantenga la aplicación en funcionamiento
Consola.WriteLine("Press key to exit");
Consola.ReadLine();
cadena estática privada GenerateClientId (prefijo de cuerda, longitud de entrada)
{}
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var random = nuevo Random();
Var random Chars = new char[length];
para (int i = 0; i)
{}
randomChars[i] = chars[random.Next(chars.Length)];
}
volver prefijo + nueva cadena (cámaras de la sabiduría);
}
}

Crear un Bundle ejecutable

Así es como este cliente C puede ser compilado usando el compilador gcc a un ejecutable.

Utilizando .Net SDK :

Para compilar y ejecutar el programa, utilice el siguiente comando:

dotnet run

Este comando construirá y ejecutará su aplicación, y usted debe ver la salida en el terminal.

Construir el proyecto (opcional):

Si desea compilar el proyecto sin ejecutarlo, utilice:

dotnet build

Los binarios compilados se ubicarán en el directorio bin dentro de su carpeta de proyecto.

Usando Visual Studio:

1. Compilar y ejecutar el programa:

  • Haga clic en el botón "Iniciar" (botón de juego verde) o pulso F5 para construir y ejecutar su aplicación.
  • La salida se mostrará en la ventana "Output" o en la ventana de consuelo que Abre.
2. Construir el proyecto (opcional):
  • Para construir el proyecto sin ejecutarlo, vaya al menú "Build" y seleccione "Build" Solución" o pulso Ctrl+Shift+B.
  • Los binarios compilados se ubicarán en el directorio bin dentro de su proyecto carpeta.

Conecta a tu cliente con nuestro estado de artenuestro corredor(CrystalMQ) o cualquier agente de su elección. Esta poderosa combinación garantizará un rendimiento y una fiabilidad óptimos para todas sus necesidades de mensajería, allanando el camino para una integración de sistema robusta y eficiente.