Android客户端无法连接到C#MQTT服务器,错误代码32103
我正在开发一个非常简单的MQTT Android客户端,因此我可以使用在C#中使用库创建的MQTT服务器连接到它 我首先用一个C#客户机和Node RED测试了C#broker,它运行得很好。 在接下来的教程中,我还使用CloudMQTT测试了Android客户端,它也运行得非常好 但当我试图将Android客户端连接到C#服务器时,Android客户端给了我以下错误: Mqtt:未能连接到:tcp://localhost:1883 无法连接到服务器(32103)-java.net.ConnectException:连接被拒绝 我使用Bluestack作为模拟器(我将尽快在真正的Android设备上测试它)。我尝试重新启动仿真器(如中所述),但也没有成功 Android客户端的代码与我前面提到的教程(使用Paho MQTT库)中的代码完全相同,但更改了serverUri和订阅主题:Android客户端无法连接到C#MQTT服务器,错误代码32103,c#,android,mqtt,C#,Android,Mqtt,我正在开发一个非常简单的MQTT Android客户端,因此我可以使用在C#中使用库创建的MQTT服务器连接到它 我首先用一个C#客户机和Node RED测试了C#broker,它运行得很好。 在接下来的教程中,我还使用CloudMQTT测试了Android客户端,它也运行得非常好 但当我试图将Android客户端连接到C#服务器时,Android客户端给了我以下错误: Mqtt:未能连接到:tcp://localhost:1883 无法连接到服务器(32103)-java.net.Connec
final String serverUri = "tcp://localhost:1883";
final String subscriptionTopic = "step/time";
该应用程序只有一个文本视图,我可以在其中设置收到的消息
至于C#server,我每10秒发送一次时间戳。这是我的代码:
namespace MQTTServerExample
{
class Program
{
static void Main(string[] args)
{
serverAsync();
}
private static async Task serverAsync()
{
// Starting the MQTT Server
var mqttServer = new MqttFactory().CreateMqttServer();
var options = new MqttServerOptions();
//Saving retained application messages
options.Storage = new RetainedMessageHandler();
// Publishing messages
await mqttServer.StartAsync(options);
Console.WriteLine("### SERVER CONNECTED ###");
Console.WriteLine("Press ENTER to exit.");
MqttApplicationMessage message;
#pragma warning disable CS4014
Task.Run(async () =>
{
while (true)
{
message = new MqttApplicationMessageBuilder()
.WithTopic("step/time")
.WithPayload(DateTime.Now.ToString())
.WithExactlyOnceQoS()
.WithRetainFlag(true)
.Build();
await mqttServer.PublishAsync(message);
await Task.Delay(10000); // Every 10 seconds
}
});
#pragma warning restore CS4014
//await mqttServer.PublishAsync(message);
Console.ReadKey();
await mqttServer.StopAsync();
}
}
我不熟悉连接协议,但我仍然不清楚它们,所以我希望您能帮助我理解这个问题。A
java.net.ConnectException:connection-seeded
exception表示您尝试连接的主机和端口上没有服务侦听,例如,因为主机地址或端口错误,或者服务未启动
使用
”tcp://localhost:1883“
只有当服务器与客户端在同一台机器上运行时(即在您的情况下是Android设备),服务器地址才起作用。您应该使用服务器的名称或IP地址。Ajava.net.ConnectException:连接被拒绝
异常意味着没有服务侦听您尝试连接的主机和端口,例如,因为主机地址或端口错误,或服务未启动
使用
”tcp://localhost:1883“
只有当服务器与客户端在同一台机器上运行时(即在您的情况下是Android设备),服务器地址才起作用。您应该使用服务器的名称或IP地址。我猜您的C#broker只是在本地主机上侦听,而不是在承载它的机器的外部IP地址上侦听
当在同一台机器上运行C#客户端时,这会起作用,但当您使用来自Android客户端的外部IP地址时,则不会起作用
另一个可能的选择是,您正在代理计算机上运行防火墙,这将停止Android客户端连接。我猜您的C#broker只是在本地主机上侦听,而不是在托管它的计算机的外部IP地址上侦听 当在同一台机器上运行C#客户端时,这会起作用,但当您使用来自Android客户端的外部IP地址时,则不会起作用
另一个可能的选择是,您正在代理计算机上运行防火墙,这将停止Android客户端连接。您好,谢谢!!实际上我用我的机器的IP试过了,它给了我同样的错误,所以我不知道为什么会发生这种情况。所以它可以从C#中的客户端工作,但不能从Android客户端工作?C#客户端与服务器在同一台机器上吗?如果是这样的话,这可能是一个防火墙问题!我想那一定是防火墙的问题。我周一试试这个,然后再给你回复。非常感谢。嗨,谢谢你!!实际上我用我的机器的IP试过了,它给了我同样的错误,所以我不知道为什么会发生这种情况。所以它可以从C#中的客户端工作,但不能从Android客户端工作?C#客户端与服务器在同一台机器上吗?如果是这样的话,这可能是一个防火墙问题!我想那一定是防火墙的问题。我周一试试这个,然后再给你回复。非常感谢。如果这是第一种选择,我如何让代理也监听外部IP?我将在周一研究这两个选项,然后再与您联系,非常感谢!如果这是第一种选择,我如何让代理也监听外部IP?我将在周一研究这两个选项,然后再与您联系,非常感谢!我发现将模拟器连接到本地服务器很棘手。一旦你找到了正确的地址,它很可能会在真正的设备上工作。我发现将模拟器连接到本地服务器是一件棘手的事情。一旦你找到了正确的地址,它很可能会在真正的设备上工作。