2016-11-22 8 views
0

Клиент mqtt имеет тот же идентификатор клиента. как закрыть старое подключение? как раз.Mqtt broker, закрытие старого соединения

New connection from 192.168.3.57 on port 1883. 
1479826181: Client paho166768969170988 already connected, closing old connection. 
1479826181: Client paho166768969170988 disconnected. 
1479826181: New client connected from 192.168.3.57 as paho166768969170988 (c1, k60, u'admin'). 

EDIT:

String clientId ="**public_cloud**"; 
    try { 
     MqttClient sampleClient = new MqttClient(config.getBroker(), clientId); 
     sampleClient.setCallback(new PushCallback()); 

     MqttTopic mtopic = sampleClient.getTopic(config.getTopic()); 

     MqttConnectOptions connOpts = new MqttConnectOptions(); 
     connOpts.setCleanSession(true); 
     connOpts.setConnectionTimeout(100); 
     connOpts.setKeepAliveInterval(200); 
     connOpts.setUserName(config.getUsername()); 
     connOpts.setPassword(config.getPassword().toCharArray()); 
     connOpts.setWill(mtopic, "close".getBytes(), 0, true); 

     sampleClient.connect(connOpts); 
    } catch (MqttException e) { 
     e.printStackTrace(); 
    } 
} 

если ClientID такое же, есть ошибка.

ConnectionLost, причина: (32109) - java.io.EOFException

+0

Пожалуйста, объясните более ясно, что ваш просят здесь. – hardillb

ответ

0
String clientId ="**public_cloud**"; 
    try { 
     MqttClient sampleClient = new MqttClient(config.getBroker(), clientId); 
     sampleClient.setCallback(new PushCallback()); 

     MqttTopic mtopic = sampleClient.getTopic(config.getTopic()); 

     MqttConnectOptions connOpts = new MqttConnectOptions(); 
     connOpts.setCleanSession(true); 
     connOpts.setConnectionTimeout(100); 
     connOpts.setKeepAliveInterval(200); 
     connOpts.setUserName(config.getUsername()); 
     connOpts.setPassword(config.getPassword().toCharArray()); 
     connOpts.setWill(mtopic, "close".getBytes(), 0, true); 

     sampleClient.connect(connOpts); 
    } catch (MqttException e) { 
     e.printStackTrace(); 
    } 
} 

Если clientId то же самое, он имеет ошибку:

ConnectionLost,cause:(32109) - java.io.EOFException

+0

Вы должны были отредактировать вопрос, чтобы добавить это, а не добавить его в качестве ответа. На этот раз я добавил его для вас. – hardillb

0

Каждое соединение с брокером должны иметь уникальный идентификатор клиента. Это часть спецификации MQTT. Как брокер обрабатывает новое соединение с существующим идентификатором клиента, но большинство из них отключит самое старое соединение.

Обычное исправление в ситуации, вы видите, чтобы использовать случайно сгенерированный идентификатор клиента или текущий штамп времени

long time = new Date().getTime(); 
String clientId ="public_cloud" + time; 
    try { 
     MqttClient sampleClient = new MqttClient(config.getBroker(), clientId); 
     sampleClient.setCallback(new PushCallback()); 

     MqttTopic mtopic = sampleClient.getTopic(config.getTopic()); 

     MqttConnectOptions connOpts = new MqttConnectOptions(); 
     connOpts.setCleanSession(true); 
     connOpts.setConnectionTimeout(100); 
     connOpts.setKeepAliveInterval(200); 
     connOpts.setUserName(config.getUsername()); 
     connOpts.setPassword(config.getPassword().toCharArray()); 
     connOpts.setWill(mtopic, "close".getBytes(), 0, true); 

     sampleClient.connect(connOpts); 
    } catch (MqttException e) { 
     e.printStackTrace(); 
    } 
}