【问题标题】:Machine is not on the network when trying to connect MQTT?尝试连接 MQTT 时机器不在网络上?
【发布时间】:2021-01-04 05:58:51
【问题描述】:

嗨,我的应用程序中的开发人员我执行两个操作,一个是通过以编程方式提供 SSID 和密码 来连接特定的 wifi,另一个是与 MQTT。两种操作单独工作都很好,但是当第一次以编程方式连接到 WIFI 之后,如果我尝试连接 MQTT 它会抛出 Exception p>

MqttException (0) - java.net.SocketException: socket failed: ENONET (Machine is not on the network)
1608792187.259 31589-31589/com.asiczen.azlock W/System.err:     at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
1608792187.259 31589-31589/com.asiczen.azlock W/System.err:     at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:690)
1608792187.259 31589-31589/com.asiczen.azlock W/System.err:     at java.lang.Thread.run(Thread.java:919)

这是我的 Wifi 连接。

private void connectToBrideAboveQ(String networkSSID, String networkPass){
        WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
        builder.setSsid(networkSSID);
        builder.setWpa2Passphrase(networkPass);

        WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();

        NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
        networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
        networkRequestBuilder.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);

        NetworkRequest networkRequest = networkRequestBuilder.build();
        cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        networkCallback = new ConnectivityManager.NetworkCallback(){
            @Override
            public void onAvailable(@NonNull Network network) {
                super.onAvailable(network);
                Toast.makeText(MainActivity.this, "Connected", Toast.LENGTH_SHORT).show();
                Log.d(TAG, "onAvailable: "+network);
                cm.bindProcessToNetwork(network);
            }
        };
        cm.requestNetwork(networkRequest, networkCallback);

    }

这里是mqtt连接代码

mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setCleanSession(true);
mqttClient = new MqttAndroidClient(this, url, id);
        mqttClient.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable throwable) {
                doConnectTask = true;
                Log.d(TAG, "MQTT connectionLost: ");
            }

            @Override
            public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {

            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

            }
        });

mqttClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
                    @Override
                    public void onSuccess(IMqttToken iMqttToken) {
                        Log.d(TAG, "MQTT CONNECTED: ");
                    }

                    @Override
                    public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
                        doConnectTask = true;
                        //setNewMqttClient();
                        throwable.printStackTrace();
                        Log.d(TAG, "MQTT FAILER onFailure: ");
                    }
                });

提前致谢

【问题讨论】:

  • 这里有什么问题?我在代码中看不到您使用ConnectivityManager.NetworkCallback() 提供的回调来等待触发MQTT 连接。
  • 你为什么要从 2 个帐户发帖?

标签: android mqtt android-wifi paho wifip2p


【解决方案1】:

最后我在连接到 MQTT 之前解决了这个问题,只需调用 cm.bindProcessToNetwork(null); 这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    相关资源
    最近更新 更多