MQTT使用3G时无法连接到服务器

时间:2014-08-29 08:47:59

标签: android mqtt

当我尝试在3G连接上运行我的应用程序时,它会尝试连接大约1或2分钟,然后它会抛出异常,它在wifi上工作得很好,但在3G上则不行。我在不同的网络上试过不同的人手机。为什么不连接?

它抛出一个MQTT异常的异常

Unable to connect to server

这是我称之为MQTT的类,它创建了一个新线程:

    public class MQTTService extends Service {

    ContextWrapper c = this;
    private MqttClient mqttClient;

    public IBinder onBind(Intent intent) {
        return null;
    }


    @Override
public void onStart(Intent intent, int startId) {

        Thread background = new Thread(new Runnable() {
            final String BROKER_URL = "tcp://gateway.thebroker.com:1883";
            final String clientId = "android-client90";

            public void run() {
                Looper.prepare();
                 try{


                    MqttClient mqttClient = new MqttClient(BROKER_URL, clientId, new MemoryPersistence());
                    MqttConnectOptions opts = new MqttConnectOptions();
                    opts.setKeepAliveInterval(600);
                    opts.setUserName("nabin");
                    opts.setPassword("M4rk3r".toCharArray());   



                    Log.e("Before Callback", "Connecting..."); // Code works till here if callback is set then errors galore
                    //mqttClient.setCallback(handler.obtainMessage());
                    mqttClient.setCallback(new PushCallback(c));

                    mqttClient.connect(opts);

                        mqttClient.subscribe("house/pill/notification/bad");
                        mqttClient.subscribe("house/pill/notification/good");
                        mqttClient.subscribe("house/pill/notification/skip");
                        mqttClient.subscribe("house/pill/notification/alert");
                        mqttClient.subscribe("house/pill/notification/snooze");
                        mqttClient.subscribe("house/pill/schedule/response");
                        mqttClient.subscribe("house/pill/nextPill/response");

                        Log.e("CONNECTED!", "COOOONNECTED!!!!!");
                }catch(MqttException e){
                    Log.e("Internet Error", "No connection available  " + e.getMessage() );
                }catch(Exception e){
                    Log.e("ERRRRRORRRRR ", e.getMessage());
                }
            }           
    });  
    background.start();
    }
   }    

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

如果您想从其他网络访问您的服务器,它需要一个公共IP地址,这是世界上独一无二的。从本地网络,通过wifi,它不需要公开,请求熄灭,并在走出路由器之前找到地址。

你的互联网提供商有私人IP地址,这意味着他们通过路由器(NAT网络)给你ip。你可以沟通,但没有人可以通过其他网络与你联系。

如果您致电您的互联网服务提供商,您可以要求提供您的IP地址以公开。 这对我来说是经验,4个支持者中的3个不知道公共IP地址是什么,他们问:你的意思是静态? ..没有..公开。说服他们。

答案 1 :(得分:0)

当您的3G连接尝试通过互联网与您的经纪人联系时,您的无线连接接缝​​与您的经纪人位于同一网络中。 您的3G连接必须能够通过端口gateway.thebroker.com访问主机1883

答案 2 :(得分:0)

如果您想要一个便宜的公共IP地址,我建议https://www.digitalocean.com/pricing/每月5美元/小时计费,我的意思是...... 0.007美元/小时。然后,您可以使用任何在线教程轻松安装Mosquitto Broker。

或者,您可以使用公共开放服务器来使用以下任何一种来测试MQTT:http://mqtt.org/wiki/doku.php/public_brokers问题是,它们可能很慢,因为任何人都可以使用它们。但是,其他人说的是真的。您的手机通过WLAN(无线局域网)连接到它,但您的3G / 4G服务无法到达该地址。