有谁遇到过同样问题的可以探讨下,或者已经解决问题的,能够指导下我
获取组播锁
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 都接收不到组播!表示很不解呀
难道版本越高 反而不支持组播还是需要在手机上做什么设置?
转载于:https://www.cnblogs.com/riasky/p/3473081.html
相关资源:组播发送工具和接收工具