2016-11-22 34 views
0

mqttクライアントは同じクライアントIDを持っています 古い接続を閉じるにはどうすればいいですか?このように Mqttブローカー、古い接続を閉じる

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:のClientIDが同じであれば

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(); 
    } 
} 

は、エラーが発生しました。

ConnectionLost、原因:(32109) - java.io.EOFException

+0

あなたがここに求めて何をより明確に説明してくださいランダムに生成されたクライアントIDまたは現在のタイムスタンプを使用することです。 – 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

ブローカーへのすべての接続が持っている必要があります一意のクライアントID。これはMQTT仕様の一部です。ブローカが既存のクライアントIDを使用して新しい接続を処理する方法は、ほとんどの場合、最も古い接続が切断されます。

あなたが見ている状況で通常の修正が

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(); 
    } 
} 
関連する問題