Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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
“线程中的异常”;“主要”;java.lang.IllegalArgumentException:没有为scheme安装网络模块;http「;“URI的定义”;http://xxx.xxx.xxx.xxx:xxxx"_Java_Http_Mqtt_Paho - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.IllegalArgumentException:没有为scheme安装网络模块;http「;“URI的定义”;http://xxx.xxx.xxx.xxx:xxxx"

“线程中的异常”;“主要”;java.lang.IllegalArgumentException:没有为scheme安装网络模块;http「;“URI的定义”;http://xxx.xxx.xxx.xxx:xxxx",java,http,mqtt,paho,Java,Http,Mqtt,Paho,我目前正在为我的项目使用MQTT eclipse/paho.MQTT.java库。这是eclipse/paho.mqtt.java库的链接 我想用http协议连接MQTT。但是原来的库支持tcp协议。我试图通过创建mqtt客户机与mqtt建立连接。我将在下面显示我的代码 很抱歉在IP地址和URL中使用了xxx符号 import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.Memo

我目前正在为我的项目使用MQTT eclipse/paho.MQTT.java库。这是eclipse/paho.mqtt.java库的链接

我想用http协议连接MQTT。但是原来的库支持
tcp
协议。我试图通过创建mqtt客户机与mqtt建立连接。我将在下面显示我的代码

很抱歉在IP地址和URL中使用了
xxx
符号

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;


public class MQTT {
  public static void main(String[] args) {

    String topic        = "MQTT Examples";
    String content      = "Message from MqttPublishSample";
    int qos             = 2;
    //String broker       = "tcp://iot.eclipse.org:1883";
    String broker       = "http://xxx.xxx.xxx.xxx:xxxx";
    String clientId     = "JavaSample";
    MemoryPersistence persistence = new MemoryPersistence();

    try {
        MqttClient sampleClient = new MqttClient(broker, clientId, null);
        MqttConnectOptions connOpts = new MqttConnectOptions();
        connOpts.setCleanSession(true);
        String accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        String pass = "";
        char[] charArr = pass.toCharArray();
        //I added in here my access token of the server
        connOpts.setUserName(accessToken);
        connOpts.setPassword(charArr);
        System.out.println("Connecting to broker: "+broker);
        sampleClient.connect(connOpts);
        System.out.println("Connected");
        System.out.println("Publishing message: "+content);
        MqttMessage message = new MqttMessage(content.getBytes());
        message.setQos(qos);
        sampleClient.publish(topic, message);
        System.out.println("Message published");
        sampleClient.disconnect();
        System.out.println("Disconnected");
        System.exit(0);
    } catch(MqttException me) {
        System.out.println("reason "+me.getReasonCode());
        System.out.println("msg "+me.getMessage());
        System.out.println("loc "+me.getLocalizedMessage());
        System.out.println("cause "+me.getCause());
        System.out.println("excep "+me);
        me.printStackTrace();
    }
  }
}
它显示以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: no NetworkModule installed for scheme "http" of URI "http://xxx.xxx.xxx.xxx:xxxx"
at org.eclipse.paho.client.mqttv3.internal.NetworkModuleService.validateURI(NetworkModuleService.java:70)
at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:454)
at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:320)
at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:315)
at org.eclipse.paho.client.mqttv3.MqttClient.<init>(MqttClient.java:227)
at MQTT.main(MQTT.java:17)
线程“main”java.lang.IllegalArgumentException中的异常:未为URI的方案“http”安装网络模块http://xxx.xxx.xxx.xxx:xxxx" 位于org.eclipse.paho.client.mqttv3.internal.NetworkModuleService.validateURI(NetworkModuleService.java:70) 位于org.eclipse.paho.client.mqttv3.MqttAsyncClient.(MqttAsyncClient.java:454) 位于org.eclipse.paho.client.mqttv3.MqttAsyncClient.(MqttAsyncClient.java:320) 位于org.eclipse.paho.client.mqttv3.MqttAsyncClient.(MqttAsyncClient.java:315) 位于org.eclipse.paho.client.mqttv3.MqttClient.(MqttClient.java:227) 在MQTT.main(MQTT.java:17) 因此,我应该为此做些什么,例如eclipse在
stringbroker=”中使用了
tcp
协议tcp://iot.eclipse.org:1883";。 但是我想为此设置
http
,我尝试将其添加为,
stringbroker=”http://xxx.xxx.xxx.xxx:xxxx";
然后出现了上述错误,那么应该怎么做呢。

问题不清楚您想做什么,但这可能有助于澄清一些问题

  • MQTT是发布/订阅协议,HTTP是请求-响应协议。整个范例是不同的,你不能直接用一个代替另一个
  • MQTT通常在TCP/IP之上本机运行,但也可以使用WebSocket作为传输层运行。WebSocket通过HTTP进行引导
  • Paho客户端代理URL架构(协议)中的URL可以是以下之一:

    • tcp://
      这是tcp上的本机MQTT
    • ssl://
      这是使用ssl/TLS的TCP上的本机MQTT
    • ws://
      WebSocket上的此MQTT
    • wss://
      这是带有SSL/TLS的WebSocket上的MQTT
    • local://
      特殊情况在这里不有用

    为了在TCP上使用基本MQTT以外的任何东西(
    TCP://
    ),您需要将代理配置为在与默认1883不同的端口上作为额外的侦听器来支持此功能。

    它在哪里说支持HTTP?我没有看到它。它不支持HTTP吗?但情况是我想用HTTP协议连接它。你可以想要任何你喜欢的东西,但它在中说的是“应用程序可以使用:普通TCP套接字和安全SSL/TLS套接字连接到MQTT服务器”。那么我应该为代码做什么,你能更改代码吗?更改它做什么?这是不可能的。非常感谢您,先生,我向您道歉,因为我无法清楚地提交问题。但是,先生,你的回答实际上与问题相符