1. 程式人生 > >android multicast 多播(組播)問題

android multicast 多播(組播)問題

有誰遇到過同樣問題的可以探討下,或者已經解決問題的,能夠指導下我   


獲取組播鎖

private  InetAddress   group;

   WifiManager  wm=(WifiManager)getSystemService(Context.WIFI_SERVICE);

   MulticastLock mlock=wm.createMulticastLock("mygroup");

  mlock.acquire();

  group =InetAddress.getName("239.255.255.250");  //建立多播組

 不能在UI thread 上直接傳送和接收組播,開闢一個子執行緒

 new Thread(){

   public void run(){

       StringBuffer sb=new StringBuffer();

       sb.append("data");  //傳送組播的內容

      byte[]  sendata=sb.getBytes();

      mlock.setLoopbackMode(true);  //設定模式  Loopbackmode 不是很清楚 根據意思應該是   

週期性的傳送訊息  這個要看具體的抓包什麼情況

      mlock.joinGroup(group);

//設定時間任務每隔3秒傳送一次組播

  Timer timer=new Timer();

   timer.schedule(new MyTimerTask(),3000);

     while(true){

           DatagramPacket temppacket=new new DatagramPacket(bs, bs.length, group,prot);

          mlock.recive(temp);

         String packetIpAddress = new String(temp.getData(), 0, temp.getLength()).trim();

         if(){    //過濾出想要獲取的資訊

          }else{

            Thread.sleep(2000);          //休眠兩秒再接收組播

          }

       

     }

    }

}.start();

  

  //時間任務
class MyTimerTask extends TimerTask{
byte[] bs = new byte[1024];
@Override
public void run() {
// TODO Auto-generated method stub
DatagramPacket packet = new DatagramPacket(sendData,sendData.length, group, Integer.valueOf(pro.getProperty("multicast_port")));
try {
multicastsocket.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

  

接收和傳送放在同一個執行緒裡迴圈執行

  

使用 htc 4.01  和sony 4.2.2的可以接收到組播  但是lg nexus 4.3 和nexus 4.4 都接收不到組播!表示很不解呀

難道版本越高 反而不支援組播還是需要在手機上做什麼設定?