2014-08-29 64 views
0

當我嘗試在3G連接上運行我的應用程序時,它嘗試連接大約1或2分鐘,然後它會引發異常,它在wifi上運行完全正常,但不在3G上。我嘗試過不同的人在不同的網絡電話。爲什麼不能連接?MQTT無法連接到服務器時使用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(); 
    } 
    }  

感謝您的幫助!

回答

0

如果你想從另一個網絡到達你的服務器,它需要一個公共IP地址,這個世界是獨一無二的。從本地網絡,通過WiFi,它不需要公開,請求熄滅,並且在出去路由器之前找到地址。

你在你的互聯網提供商那裏得到了私人IP地址,這意味着他們通過路由器(NAT網絡)給你ip。您可以進行溝通,但沒有人可以通過其他網絡與您聯繫。

如果你打電話給你的互聯網提供商,你可以要求你的IP地址公開。 對我來說是經驗,4位支持者中的3位不知道公共IP地址是什麼,他們問:你的意思是靜態的嗎? ..不..公衆。說服他們。

0

當您的3G連接試圖通過互聯網與您的經紀人聯繫時,您的wifi連接線與您的經紀人處於同一網絡。 您的3G連接必須能夠通過端口1883到達主機gateway.thebroker.com