说明 / 示例
## 标准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)