Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android multicast 多播(組播)

android multicast 多播(組播)

編輯:關於Android編程

獲取組播鎖

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 都接收不到組播!表示很不解呀

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









  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved