2017-10-24 13 views
0

同じポート上の他のデバイスからデータを受信して​​いる間にUDPポートでブロードキャストメッセージを送信する良いオプションはありますか? 私は現在、これを持っている:データを受信中にUDPでブロードキャストする

まず、私は読書と送信の両方のための1 DiagramSocket初期化:私は実行する場合

public class Server implements Runnable { 

    public Server(iBroadcastResponse iBResponse){ 
     BroadcastClass.this.iBResponse = iBResponse; 
    } 

    @Override 
    public void run() { 
     startSocket(); 
     while (DataHandler.isEmergencyMode.get()) { 
      try {      
       byte[] buf = new byte[256]; 
       DatagramPacket packet = new DatagramPacket(buf, buf.length); 
       if(socket == null) 
        return; 
       socket.receive(packet); 
       String command = stringFromPacket(packet); 
       Log.d(TAG, command); 
       addToBroadcastCalls(command); 
       if(iBResponse != null) 
        iBResponse.onResponse(); 

      } catch (Exception e) { 
       Log.e(TAG, "Server: Error!\n"); 
      } 
     } 
     Log.e(TAG, "Stop!"); 
    } 

    String stringFromPacket(DatagramPacket packet) { 
     return new String(packet.getData(), 0, packet.getLength()); 
    } 
} 

:私は現在のソケットのための受信/読んでいる最初のスレッドで

private void startSocket(){ 
    try { 
     if(socket == null) { 
      socket = new DatagramSocket(3040); 
      socket.setBroadcast(true); 
      socket.setReuseAddress(true); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

をこれは正常に動作し、受信データを読み取ります。私は別のスレッドでデータを送信しようとした場合でも:.send()が呼び出されると

socketThread = new Thread(){ 
      @Override 
      public void run() { 
       startSocket(); 
       String message = "Message"; 
       byte[] buf = message.getBytes(); 
       DatagramPacket packet = new DatagramPacket(buf, buf.length); 
       try { 
        if(!socket.isConnected()) 
         socket.connect(InetAddress.getByName("255.255.255.255"), 3040); 
        if (socket != null) { 
         socket.send(packet); 
        } 
        Log.d(TAG, "Send: " +message); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     socketThread.start(); 

それはそれだけでメッセージを送信し、今ので、他のデバイスからのデータの受信を停止するが、他のデバイスからの受信を停止します。

この問題の解決策はありますか?

答えて

0

これは私だけ

Log.w(TAG, "Message..."); 

System.log... 

を変更 https://stackoverflow.com/a/25520279/1088975

ソリューションだったと私はIPが常に "255.255.255.255" の代わりに、

getBroadcastAddress() 
になるように変更しました

現在WIFIのブロードキャストIPを返します。これはAndroid端末では機能しませんでした

関連する問題