设置mosquitto经纪人在两个端口上监听?

时间:2015-08-24 11:36:02

标签: mosquitto

我目前正在使用mosquitto代理在c#中构建应用程序进行mqtt交易,我可以通过tcp(端口1883)或tls(端口8883)连接应用程序。这是使用conf文件的端口设置完成的,但程序在侦听器值中设置的任何端口崩溃,因此只有默认端口有效 - 我不知道是否允许用户选择tcp或tls,但是我想让这个工作正常。

编辑:

# Config file for mosquitto
user mosquitto

port 8883

cafile /home/ubuntu/mosquitto-certs/ca/cacert.pem

certfile /home/ubuntu/mosquitto-certs/ca/requests/webservercert.pem

keyfile /home/ubuntu/mosquitto-certs/ca/requests/webserverkey.pem

tls_version tlsv1

listener 1883

persistence true

log_dest stderr

log_type error

log_type warning

log_type notice

log_type information

connection_messages true

log_timestamp true

auth_plugin /etc/mosquitto/auth-plug.so

auth_opt_host localhost

auth_opt_port 3306

auth_opt_user ****

auth_opt_pass *****

auth_opt_backends mysql

auth_opt_dbname test

auth_opt_userquery SELECT pw FROM users WHERE username = '%s' LIMIT 1

auth_opt_superquery SELECT IFNULL(COUNT(*), 0) FROM users WHERE username = '%s' AND super = 1

auth_opt_aclquery SELECT topic FROM acls WHERE username = '%s'

auth_opt_superusers S*

Logging in over TLS

如果我通过TLS登录工作正常,但是如果我断开连接并尝试通过TCP登录,则会出现以下错误:

System.dll中出现'System.IO.IOException'类型的第一次机会异常 M2Mqtt.Net.dll中出现'uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException'类型的第一次机会异常 {“无法从传输连接读取数据:远程主机强行关闭现有连接。”}

如果我翻转端口和监听器值,也是一样。

要断开的代码:

if (_mqttClient != null && _mqttClient.IsConnected)
{
        _mqttClient.Disconnect();
        _mqttClient = null;

        SubscribeBtn.Enabled = false;
        UnSubBTN.Enabled = false;
        PublishBtn.Enabled = false;
        ConnectBtn.Enabled = true;
        UsernameTB.Enabled = true;
        PasswordTB.Enabled = true;

        DisplayBox.Items.Clear();
}

2 个答案:

答案 0 :(得分:1)

我认为这听起来像你的客户有问题我害怕,它似乎不是一个蚊子问题。我建议使用mosquitto_sub和mosquitto_pub客户端检查你的蚊子设置。您可以将它们用于普通TCP和TLS连接,例如

mosquitto_sub -p 1883 -h <host> -t '$SYS/#' -u <username> -P <password>

或者对于TLS:

mosquitto_sub -p 8883 -h <host> -t '$SYS/#' -u <username> -P <password> --cafile <ca certificate>

如果这些有效,您需要查看程序中的问题。

答案 1 :(得分:1)

我实际上通过在安全侦听器之后设置侦听器1883和侦听器8883以及SSL / TLS的配置来实现此功能。

感谢@ralight代理经纪人和@kartben回复。