Android UDP广播 客户端循环发送与接收
2014-02-24 09:37
357 查看
package com.ZHouseNew.android.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import android.content.Context; import com.ZHouseNew.android.Settings; import com.ZHouseNew.android.ZHApplication; import com.ZHouseNew.android.cache.FileCache; import com.ZHouseNew.android.log.Logger; import com.ZHouseNew.android.result.ScanResult; import com.ZHouseNew.android.utils.ZHAppUtil; /** * udp扫描网关类 * @author zhoushuai Email: 657523985@qq.com * Date: 14-07-14 * Time: 上午10:01 */ public class UdpScan { private static final String TAG = UdpScan.class.getSimpleName(); private static final int iReceivePort = 0; //接收消息的端口号 private static final int UDP_TIMEOUT = 100; //设置超时为100ms private static final int SCAN_TIME = 1000; //扫描的时间 private static final String data = //广播发送的数据 "action=cg_do_udp&data=" + Settings.Broadcast_Data + "\n"; public static ScanResult toDo(Context context, ZHApplication zhApplication){ try { DatagramSocket socketSend = new DatagramSocket(); DatagramSocket socketReceive; //设置接收socket socketReceive = (iReceivePort == 0 ? socketSend:new DatagramSocket(iReceivePort)); //设置超时 socketReceive.setSoTimeout(UDP_TIMEOUT); //设置发送为广播 socketSend.setBroadcast(true); //设置发送数据和接收byte,512字节大小 byte[] mDataSend = data.getBytes(); byte[] mDataReceive = new byte[512]; //设置发送的ip地址 InetAddress mAddress = InetAddress.getByName(ZHAppUtil.getBroadIP(context)); //创建发送类型的数据包 DatagramPacket sendPacket = new DatagramPacket (mDataSend, mDataSend.length, mAddress, Settings.Broadcast_Port); boolean isScanOver = false; //当前时间 long currentTime = System.currentTimeMillis(); //循环扫描 while(!isScanOver) { long nowTime = System.currentTimeMillis(); if ((nowTime - currentTime) > SCAN_TIME) { //扫描结束 isScanOver = true; socketSend.close(); socketReceive.close(); break; } /** 发送数据包 **/ socketSend.send(sendPacket); Logger.i(TAG, "udp send message is ok."); //创建接收类型的数据包 DatagramPacket mPacketReceive = new DatagramPacket( mDataReceive, mDataReceive.length); try { /** 接收数据包 **/ socketReceive.receive(mPacketReceive); Logger.i(TAG, "udp receive message is ok."); //获取反馈的ip地址 String receiveIP = mPacketReceive.getAddress().getHostAddress(); //获取反馈的数据 String receiveData = new String(mPacketReceive.getData(), mPacketReceive.getOffset(), mPacketReceive.getLength()); Logger.i(TAG, "receiveIP: " + receiveIP); Logger.i(TAG, "receiveData: " + receiveData); if (receiveData != null && !receiveData.equals("")) { if (zhApplication.scanDatas.size() > 0) { boolean isNewMessage = true; for (String d : zhApplication.scanDatas) { if (d.equals(receiveData)) { isNewMessage = false; } } if (isNewMessage) { zhApplication.scanDatas.add(receiveData); zhApplication.scanSocketIP.put(receiveData, receiveIP); } }else { zhApplication.scanDatas.add(receiveData); zhApplication.scanSocketIP.put(receiveData, receiveIP); } } } catch (Exception e) { //内部捕捉异常,防止跳出循环 Logger.e(TAG, "udp receive timeout."); } } //扫描结束后 if (zhApplication.scanDatas.size() > 0) { //存入文本缓存 int dLen = zhApplication.scanDatas.size(); for (int i = 0; i < dLen; i++) { FileCache.saveFileCache(Settings.SCAN_DATAS + i, zhApplication.scanDatas.get(i)); } for (int i = 0; i < dLen; i++) { FileCache.saveFileCache(zhApplication.scanDatas.get(i), zhApplication.scanSocketIP.get(i)); } zhApplication.scanResult.setDatas(zhApplication.scanDatas); zhApplication.scanResult.setIps(zhApplication.scanSocketIP); return zhApplication.scanResult; } } catch (Exception e) { Logger.e(TAG, "UDP scan is failure",e); } return null; } }
udp循环广播和接收,存储不同的数据和其对应的ip的地址,用于后面区别连接
相关文章推荐
- Android客户端接收PC端UDP广播
- Android发送和接收UDP广播
- Android使用wifi通过UDP协议发送广播数据包给PC接收不到问题解决方法
- UDP客户端实现在不同端口上发送和接收数据
- Android—启动内置APK和动态发送接收自定义广播
- android安全问题(七) 抢先接收广播 - 内因篇之广播发送流程
- android的广播发送与接收
- Android 系列 4.7发送/接收广播消息
- Android 广播的发送与接收
- Linux系统下UDP发送和接收广播消息小样例
- C#UDP的多路广播组的发送和接收
- 学习使用dwr 中的push技术 服务器发送一个广播,让每一个客户端都能接收到这个广播。
- iphone发送udp广播并接收数据
- socket服务器发送大数据,客户端循环接收
- android 发送UDP广播,搜寻服务器建立socket链接
- ServerSocket和Socket建立通信(服务器和客户端循环接收发送)
- MIUI7,Android版本5.0.2,一个程序发送自定义广播,另一个程序没有接收到
- UDP发送Delphi7开发服务端接收 xe2开发客户端 导致中文乱码
- Android广播入门,单个手机上App之间的发送接收