文档
测试

获取局域网内设备

GET

说明 / 示例

## 标准UDP组播发现局域网内的设备 ### 端口:18239 (DISCOVER_PORT) ### 组 :239.39.3.9 (DISCOVER_HOST) --- #### 监听获取设备参考代码 ``` InetAddress mDiscoverAddress = InetAddress.getByName(DISCOVER_HOST); MulticastSocket mDiscoverSocket = new MulticastSocket(DISCOVER_PORT); mDiscoverSocket.joinGroup(mDiscoverAddress); // 通知组内的设备,发送一次信息出来。一定要执行才能收到信息 delayNotifyJoin(); while (!mStop) { try { byte[] b = new byte[512]; DatagramPacket packet = new DatagramPacket(b,b.length); mDiscoverSocket.receive(packet); //获取到了设备信息 praseDevice(packet); } catch (IOException e) { e.printStackTrace(); } } ``` --- #### 通知组内的设备,发送一次信息出来 ``` private void delayNotifyJoin() { new Thread(new Runnable() { @Override public void run() { try { String newLine = "\r\n"; String text = "JOIN" + newLine; text += "uuid: " + "获取手机的一个唯一标识符" + newLine; text += "type: " + 2 + newLine; text += "host: " + "239.39.3.9" + newLine; text += "port: " + 18239 + newLine; text += newLine; byte[] data = text.getBytes(); DatagramPacket dataPacket = new DatagramPacket(data, data.length, mDiscoverAddress, DISCOVER_PORT); mDiscoverSocket.send(dataPacket); } catch (IOException e) { e.printStackTrace(); } } }).start(); } ``` #### 发送的信息数据除uuid字段需要获取外,其它字段使用默认数据 --- #### 解析获取到的信息得到一个设备 ``` private void praseDevice(DatagramPacket packet) { String result = new String(packet.getData(), 0, packet.getLength()); 通过解析这个字符串获取局域网内的一个设备(分割字符串) 比如: uuid: 422596e6-cd76-3296-ba36-9c20af60c43d //设备唯一标识符 type: 1 //类型,预留字段 name: Z9X //型号 host: 192.168.11.165 //IP port: 7239 //端口 sceneCode: 4 //设备别名 scene: bob } ``` |参数(sceneCode)|说明| |-|-| |0|客厅| |1|卧室| |2|家庭影院| |3|书房| |4|自定义别名:scene字段| --- ### [得到设备 IP 后,就可控制该设备](doc:fOZWM3WZ)