有谁遇到过同样问题的可以探讨下,或者已经解决问题的,能够指导下我


获取组播锁

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=newnew 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. Android里handler线程间的通信详解
  2. Android源码阅读之Looper
  3. Android音频开发之AudioRecord录音实现
  4. 解析Android消息处理机制 ——HandlerThread/Looper & MessageQu
  5. Handler使用总结
  6. android annotation配置及简单使用
  7. Android(安卓)Socket实例(2)
  8. Android按时间先后顺序获取目录下文件列表
  9. MVC浅析(实际上应该是MVP,有时间再更新该博客)

随机推荐

  1. RTC搭建android下三层应用程序访问服务器
  2. Android(安卓)从0开始自定义控件之 View
  3. MIT 科技评论采访 Martias Duarte: 游戏
  4. Android(安卓)10.0 PackageManagerServic
  5. 如何在Android中用好多线程
  6. 想抢先体验Android操作系统的魅力吗?那就
  7. Android开发指南-框架主题-内容提供器
  8. android系统架构图
  9. android binder机制中的BN跟BP
  10. Android本地应用程序应用方式介绍