UDP广播搜索局域网设备,返回mac地

项目需求:向局域网内的1025端口发送广播“Are You Device?”,设备收到广播后返回设备信息

udp发送广播并接收数据的流程基本都是通用的

1.发送数据:

(1)新建一个DatagramSocket对象 DatagramSocket udpSocket = new DatagramSocket();

(2)将需要广播的数据转成byte形式

(3)新建一个DatagramPacket对象指定需要广播的端口和地址DatagramPacket dataPacket = new DatagramPacket(buffer, buffer.length,InetAddress.getByName("255.255.255.255"),1025);

(4)调用DatagramSocket的send方法发送packet, udpSocket.send(dataPacket);

2.接收数据

(1)新建一个DatagramSocket对象 DatagramSocket udpSocket = new DatagramSocket();

(2)新建一个DatagramPacket对象,用于接收传过来的数据 DatagramPacket dpIn=new DatagramPacket(bufferIn,bufferIn.length);

(3)调用DatagramSocket的receive方法接收数据 udpSocket.receive(dpIn);

3.发送和接收异步执行

核心代码如下

Runnable searchRunnable = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
try
{
                    bFindGateway = true;
   DatagramPacket dataPacket = null;
udpSocket.setBroadcast(true);
buffer = dataString.getBytes();
dataPacket = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), 1025);
while(bFindGateway){
udpSocket.send(dataPacket);
}
} catch (Exception e)
{
e.printStackTrace();
Log.e("2", e.toString());
}
}};

Thread searchThread = new Thread(searchRunnable);
searchThread.start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try{
bFindGateway = true;
DatagramPacket dpIn = null;
while(bFindGateway){
byte[] bufferIn = new byte[1024];
dpIn = new DatagramPacket(bufferIn, bufferIn.length);
Log.e("receive", "receive");
udpSocket.receive(dpIn);
String result = new String(dpIn.getData(), dpIn.getOffset(), dpIn.getLength());
Log.e("result", result);
JSONObject obj = new JSONObject(result);
String macId = obj.getString("mac_id");
String type = obj.getString("machine_type");
if(!type.equals("-1")) {
resultSet.add(macId);
}
}
}
catch(Exception e){
e.printStackTrace();
Log.e("3", e.toString());
}
}
}).start();

详细代码及示例见http://download.csdn.net/detail/err118/9138151


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值