首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MQTTnet连接服务器到非本地端点

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

Stack Overflow用户
提问于 2022-08-11 14:17:42
回答 1查看 42关注 0票数 1

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

代码语言:javascript
复制
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的虚拟机。

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

代码语言:javascript
复制
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()

代码语言:javascript
复制
//...
MqttServerOptionsBuilder options = new MqttServerOptionsBuilder()
                                     .WithDefaultEndpointBoundIPAddress(new IPAddress(new byte[4] { 10, 100, 10, 100 }))
                                     .WithRemoteCertificateValidationCallback(callback)
                                     .WithDefaultEndpoint()
                                     .WithDefaultEndpointPort(1883);
//...

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

有什么想法吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-11 16:20:38

你没有。

您无法启动代理并将其绑定到另一台计算机上的IP地址/端口。

作为一项规则,经纪人不连接,客户连接到经纪人。

当代理作为客户端并设置一个桥时,它将唯一连接到另一个代理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73322256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档