Eclipse paho Mqtt:获取java.io.EOFexception

当我试图订阅mqtt客户端时,我得到“java.io.eof”exception。 我正在使用eclipse paho库并使用mosquitto broker。 我没有得到任何答案,所以请帮助我为什么会这样?

Mqtt连接和订阅

我正在使用此代码连接和订阅mosquitto

private void buildClient(String clientId){ log.debug("Connecting... "+clientId); try { mqttClient = new MqttClient(envConfiguration.getBrokerUrl(), clientId,new MemoryPersistence()); System.out.println(mqttClient.isConnected()); } catch (MqttException e) { log.debug("build client stopped due to "+e.getCause()); } chatCallback = new ChatCallback(this.userService,this); mqttClient.setCallback(chatCallback); mqttConnectOptions = new MqttConnectOptions(); mqttConnectOptions.setCleanSession(true); } @Override public void connect(String clientId,String topic) { try{ if(mqttClient == null || !mqttClient.getClientId().equals(clientId)){ buildClient(clientId); mqttClient.connect(mqttConnectOptions); subscribe(clientId,topic); } }catch (Exception e) { log.debug("connection attempt failed "+ e.getCause() + " trying..."); } } @Override public void subscribe(String clientId,String topic) throws MqttException { if(mqttClient != null && mqttClient.isConnected()){ mqttClient.subscribe(topic,0); /*try { log.debug("Subscribing... with client id :: " + clientId + "topic"); mqttClient.subscribe(topic,2); } catch (MqttException e) { log.debug("subscribing error.."+e.getLocalizedMessage()); }*/ } } } 

并且mqtt回电话

 @Override public void connectionLost(Throwable arg0) { log.debug("Connection lost... attampting retrying due to " + arg0); arg0.printStackTrace(); // chatServiceimpl.connect(); } @Override public void deliveryComplete(IMqttDeliveryToken arg0) { log.debug("delivered message" + arg0); // TODO Auto-generated method stub } @Override public void messageArrived(String arg0, MqttMessage arg1) throws Exception { log.debug("Message recived..." + arg1.toString()); userService.saveChat(arg1.toString()); } 

当我订阅mosquitto时,我正面临这个错误

错误日志

 2015-11-30/18:19:00.877 [MQTT Call: 25287] DEBUG cssChatCallback: Message recived...{ "id":"37153topic25287T1448886285.79573", "from":"37153", "to":"25287", "chatBody":[{"type": "text", "message":"The fact "}]} 2015-11-30/18:19:00.878 [MQTT Call: 25287] DEBUG cssuUserService: Saving chat... 2015-11-30/18:19:00.883 [MQTT Call: 25287] DEBUG cssuUserService: Get user by id::37153 2015-11-30/18:19:00.885 [MQTT Call: 25287] DEBUG cssuUserService: Get user by id::25287 2015-11-30/18:19:00.886 [MQTT Rec: 25287] DEBUG cssChatCallback: Connection lost... attampting retrying due to Connection lost (32109) - java.io.EOFException Connection lost (32109) - java.io.EOFException at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138) at java.lang.Thread.run(Thread.java:745) Caused by: java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java:267) at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:56) at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:100) ... 1 more 

Mosquitto日志

 1448889230: Client 25287 disconnected. 1448889230: New client connected from 192.168.2.63 as 25287 (c0, k60). 1448889231: New connection from 192.168.2.242 on port 1883. 1448889231: Client 25287 already connected, closing old connection. 1448889231: Client 25287 disconnected. 1448889231: New client connected from 192.168.2.242 as 25287 (c1, k60). 1448889231: New connection from 192.168.2.63 on port 1883. 1448889231: Client 25287 already connected, closing old connection. 1448889231: Client 25287 disconnected. 1448889231: New client connected from 192.168.2.63 as 25287 (c0, k60). 1448889269: New connection from 192.168.2.242 on port 1883. 

您有多个客户端使用相同的clientid连接到代理,这是不允许的,并且当连接代理时,将断开当前连接的客户端。

如果两个客户端都具有自动重新连接逻辑,那么它们将继续相互关闭。

更改其中一个客户端上的客户端ID。

作为上面提到的hardillb,您有多个客户端连接。 当服务器(mosquitto)再次收到来自同一客户端的连接请求时,它将断开旧连接。

使用MqttClient对象上的isConnected()方法来了解它是否已连接。 例如。

 if (! m_client.isConnected()) { // reconnect }