我对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查看所有连接的列表时,我指定的端口上没有任何连接。
所以我试着保持.WithDefaultEndpoint()行
//...
MqttServerOptionsBuilder options = new MqttServerOptionsBuilder()
.WithDefaultEndpointBoundIPAddress(new IPAddress(new byte[4] { 10, 100, 10, 100 }))
.WithRemoteCertificateValidationCallback(callback)
.WithDefaultEndpoint()
.WithDefaultEndpointPort(1883);
//...现在,至少在从100.10.100.10在本地运行时它可以工作(当然.),但是它仍然无助于我试图从外部机器连接到端口的最初问题。
有什么想法吗?提前谢谢。
发布于 2022-08-11 16:20:38
你没有。
您无法启动代理并将其绑定到另一台计算机上的IP地址/端口。
作为一项规则,经纪人不连接,客户连接到经纪人。
当代理作为客户端并设置一个桥时,它将唯一连接到另一个代理。
https://stackoverflow.com/questions/73322256
复制相似问题