Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android客户端无法连接到C#MQTT服务器,错误代码32103_C#_Android_Mqtt - Fatal编程技术网

Android客户端无法连接到C#MQTT服务器,错误代码32103

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

我正在开发一个非常简单的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和订阅主题:

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地址。

A
java.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?我将在周一研究这两个选项,然后再与您联系,非常感谢!我发现将模拟器连接到本地服务器很棘手。一旦你找到了正确的地址,它很可能会在真正的设备上工作。我发现将模拟器连接到本地服务器是一件棘手的事情。一旦你找到了正确的地址,它很可能会在真正的设备上工作。