繁体   English   中英

MQTTnet 将服务器连接到非本地端点

[英]MQTTnet Connect Server to Non-Local Endpoints

我对 MQTTnet 很陌生,我的程序的一部分需要 MQTT 代理来与第三方 MQTT 客户端交互,该客户端可能会或可能不会侦听本地端口。 如果是本地端口,我需要做的就是根据我在网上找到的示例创建一个本地 MQTT 代理:

using MQTTnet;
using MQTTnet.Server;
using System.Net;

MqttServerOptionsBuilder options = new MqttServerOptionsBuilder()
                                     .WithDefaultEndpoint()
                                     .WithDefaultEndpointPort(1883); // I know this is the default, but if port number isn't 1883 I would specify it here

MqttServer mqttServer = new MqttFactory().CreateMqttServer(options.Build());
mqttServer.StartAsync().GetAwaiter();
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();

这行得通,没问题。

现在我想要的是,而不是本地连接的服务器,我希望它连接到虚拟机,其虚构的 IP 地址为10.100.10.100

我还没有找到足够清楚地解释我应该如何做到这一点的文档或教程,所以我做了以下假设:

using MQTTnet;
using MQTTnet.Server;
using System.Net;
using System.Net.Security;

IPAddress ipAddress = new IPAddress(new byte[4] { 10, 100, 10, 100 });
RemoteCertificateValidationCallback callback = (message, cert, chain, sslPolicyErrors) =>
{
    return true;
};
MqttServerOptionsBuilder options = new MqttServerOptionsBuilder()
                                     .WithDefaultEndpointBoundIPAddress(new IPAddress(new byte[4] { 10, 100, 10, 100 }))
                                     .WithRemoteCertificateValidationCallback(callback)
                                     .WithDefaultEndpointPort(1883);

MqttServer mqttServer = new MqttFactory().CreateMqttServer(options.Build());
mqttServer.StartAsync().GetAwaiter();
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();

这没有用。 如果我从100.10.100.10在本地运行程序,也不会从另一台机器运行它。 当我通过命令行netstat -ab的所有连接列表 go 时,我指定的端口上没有任何连接。

所以我试图改为保留这条线.WithDefaultEndpoint()

//...
MqttServerOptionsBuilder options = new MqttServerOptionsBuilder()
                                     .WithDefaultEndpointBoundIPAddress(new IPAddress(new byte[4] { 10, 100, 10, 100 }))
                                     .WithRemoteCertificateValidationCallback(callback)
                                     .WithDefaultEndpoint()
                                     .WithDefaultEndpointPort(1883);
//...

现在至少它在从100.10.100.10本地运行时可以工作(当然它会......),但它仍然无助于我最初尝试从外部机器连接到端口的问题。

有任何想法吗? 提前致谢。

你没有。

您不能启动代理并将其绑定到另一台机器上的 IP 地址/端口。

作为规则,代理不连接,客户端连接到代理。

代理连接出去的唯一时间是当它作为客户端并设置桥接时连接到另一个代理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM