2016-10-21 16 views
0

私はトピック "Test"にメッセージを公開するために、Mosquittoをブローカーとして使用しています。 サブスクライバコードを実行してメッセージを取得し、同じネットワーク上の別のデバイスにメッセージを表示すると、そのメッセージは表示されません。メッセージが公開されているかどうか、ブローカをホストしていたデバイスのコマンド "sudo mosquitto_sub -h 192.168.43.17 ......"を使って確認しました。 メッセージが公開され、デバイスによって正常に取得されて表示されました。 加入者コードは、私がmessageArrived三つの機能(のいずれかを理解して何からMQTT購読者コード

package chat; 

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; 
import org.eclipse.paho.client.mqttv3.MqttCallback; 
import org.eclipse.paho.client.mqttv3.MqttException; 
import org.eclipse.paho.client.mqttv3.MqttMessage; 
import org.eclipse.paho.client.mqttv3.MqttClient; 
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; 

public class MQTTSubscriber implements MqttCallback{ 
public MQTTSubscriber(){} 

public void do1(){ 
    String topic= "Test"; 
    String broker= "tcp://192.168.43.17:1883"; 
    int qos=1; 
    String clientId="20130326"; 
    MemoryPersistence persistence = new MemoryPersistence(); 
    try { 

     MqttClient sampleClient = new MqttClient(broker, clientId, persistence); 
     MqttConnectOptions connOpts = new MqttConnectOptions(); 
     connOpts.setCleanSession(true); 
     System.out.println("Connecting to broker: "+broker); 
     sampleClient.setCallback(this); 
     sampleClient.connect(connOpts); 
     System.out.println("Connected"); 
     sampleClient.subscribe(topic, qos); 
     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(); 
    } 
} 
public void messageArrived(String topic, MqttMessage message) throws Exception { 
    System.out.println("Message Arrived: " + message); 
} 

public void connectionLost(Throwable arg0) { 
    System.out.println("Connection lost"); 
} 

public void deliveryComplete(IMqttDeliveryToken arg0) { 
    System.out.println("Delivery done"); 
} 
public static void main(String args[]){ 
    new MQTTSubscriber().do1(); 
} 
} 

である)、deilveryComplete()とconnectionLost()が呼び出されていません。メッセージを表示するためにコードにどのような変更を加える必要がありますか?

答えて

0

ブローカに接続するとすぐに切断して終了します。クライアントはメッセージを受信する時間がありません。

sampleClient.disconnect(); 
System.out.println("Disconnected"); 
System.exit(0); 

コードの次の行を削除します

関連する問題