# aardio 范例: mDNS 设备发现



```aardio
//mDNS
//mDNS 发现 ADB 设备请参考: https://www.aardio.com/zh-cn/docs/examples/Automation/adb/scrcpy.html
import win.ui;
/*DSG{{*/
var winform = win.form(text="mDNS 设备发现";right=600;bottom=400)
winform.add(
edit={cls="edit";left=10;top=50;right=590;bottom=390;edge=1;multiline=1;vscroll=1;z=2};
btnAdb={cls="button";text="发现 ADB 设备";left=10;top=10;right=140;bottom=40;z=1};
btnList={cls="button";text="查看已发现服务";left=150;top=10;right=290;bottom=40;z=3}
)
/*}}*/

import wsock.udp.mdnsClient;

var mdns = wsock.udp.mdnsClient();

// 核心：当服务完全解析后触发（已组合 IP + 端口）
mdns.onServiceResolved = function(service) {
	winform.edit.print("━━━ 发现服务 ━━━");
	winform.edit.print("  实例名: " ++ service.instanceName);
	winform.edit.print("  实例短名称: " ++ service.name);
	winform.edit.print("  主机名: " ++ service.host);
	winform.edit.print("  地址: " ++ service.ip ++ ":" ++ service.port);
	
	
	if(service.ipv6) {
		winform.edit.print("  IPv6: " ++ service.ipv6);
	}
	if(service.serviceType) {
		winform.edit.print("  类型: " ++ service.serviceType);
	}
	
	if(service.txtMap) {
		for k, v in service.txtMap {
			winform.edit.print("  [" + k + "] = " ++ v);
		}
	}
}

winform.btnAdb.oncommand = function() {
	winform.edit.text = "";
	mdns.clearCache();
	
	winform.edit.print("正在发现 ADB 设备...");
	
	// 同时查询连接服务和配对服务
	mdns.discover("_adb-tls-connect._tcp");
	mdns.discover("_adb-tls-pairing._tcp");
}

winform.btnList.oncommand = function() {
	winform.edit.print("══════ 已发现的服务列表 ══════");
	
	// 获取所有已解析的服务
	var services = mdns.getServices();
	
	if(#services == 0) {
		winform.edit.print("暂无已解析的服务");
		return;
	}
	
	for i, svc in services {
		winform.edit.print(i ++ ". " ++ svc.ip ++ ":" ++ svc.port);
		winform.edit.print("   " ++ svc.instanceName ++ '\r\n');
	}
	
	// 按类型过滤
	var adbServices = mdns.getServices("_adb-tls-connect");
	winform.edit.print("ADB 连接服务数量: " ++ #adbServices);
}

winform.onClose = function() {
	mdns.close();
}

winform.show();
win.loopMessage();
```

