当我尝试在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();
}
}
感谢您的帮助!
答案 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服务无法到达该地址。