es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo conectar MQTT con WebSocket en C#?

Intenté usar MQTTnet para conectarme a MQTT.

Pero parece que no funcionó, mostrará el mensaje de error:

No se pudo conectar al servidor remoto, la solicitud se interrumpió: No se pudo crear un canal seguro SSL/TLS.

También encontré un mensaje de error en el registro de eventos de Windows:

Se recibió una alerta fatal del punto final remoto. El código de alerta fatal definido en el protocolo TLS es 40.

Uso de MQTTnet;
Uso de MQTTnet.Client;
Uso de MQTTnet.Client.Connecting;
Uso de MQTTnet.Client.Options;

public override void Run()
{
var opción = new MqttClientOptionsBuilder()
.WithWebSocketServer("wss://mymqttserver:443")
.WithClientId(Guid.NewGuid().ToString())
.WithTls(new MqttClientOptionsBuilderTlsParameters()
{
AllowUntrustedCertificates = true,
UseTls = true,
SslProtocol = SslProtocols.Tls12,
CertificateValidationCallback = delegate { return true; },
})
.WithCleanSession()
.Construir();
var mqtt = new MqttFactory().CreateMqttClient() as MqttClient;
mqtt.ConnectAsync(option).Wait();

string convertMsg = JsonConvert.SerializeObject("¡Conexión MQTT exitosa!");

var appMsg = new MqttApplicationMessage();
appMsg.Payload = Encoding.UTF8.GetBytes(convertMsg);
appMsg.Topic = "miTema";
appMsg.QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce;
appMsg.Retain = false;

mqttClient.PublishAsync(appMsg).Wait();

}

También intenté conectarme a mi servidor MQTT con una aplicación de terceros.

Puede conectarse correctamente, por lo que mi servidor MQTT debería estar bien.

Pero no sé por qué no puedo usar C# para conectarme.

Enlace a la imagen: aquí

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “No se pudo conectar al servidor remoto, la solicitud fue cancelada: No se pudo crear un canal seguro SSL/TLS” indica que puede haber un problema con el certificado SSL/TLS en el servidor remoto. El mensaje de error “Se recibió una alerta fatal del punto final remoto. El código de alerta fatal definido en el protocolo TLS es 40” sugiere que el servidor remoto está terminando la conexión de manera inesperada.

    En el código proporcionado, parece que la conexión se está realizando utilizando el protocolo de WebSocket a través del puerto 443, con el cifrado SSL/TLS habilitado. El objeto MqttClientOptionsBuilderTlsParameters se está utilizando para configurar los parámetros SSL/TLS, incluyendo permitir certificados no confiables y especificar el protocolo SSL/TLS a utilizar (TLS 1.2 en este caso).

    Es posible que el certificado SSL/TLS en el servidor remoto no sea confiable para el cliente, lo que evitaría establecer la conexión. Verificar la configuración SSL/TLS y el certificado en el servidor remoto puede ayudar a resolver este problema.

    Alternativamente, es posible que haya un problema de configuración de software o de red en el lado del cliente que esté impidiendo establecer la conexión. Verificar los registros del sistema y las reglas del firewall puede ayudar a identificar posibles problemas.

    Por último, intentar conectarse al servidor remoto utilizando una aplicación de terceros y observar que la conexión funciona puede ayudar a reducir el problema a un componente específico del código de C#.

Comments are closed.