aardio 文档
aardio 范例: mDNS 设备发现
mDNS 发现 ADB 设备请参考
//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();
Markdown 格式