# wsock.udp.mdnsClient 库模块帮助文档

<details>  <summary>常用服务类型名</summary>  <p>

可用于 wsock.udp.mdnsClient 对象 discover 方法参数的一些常用服务名称:

~~~txt
"_services._dns-sd._udp.local";
"_http._tcp.local";
"_https._tcp.local";
"_airplay._tcp.local";
"_googlecast._tcp.local";
"_hap._tcp.local";
"_ipp._tcp.local";
"_smb._tcp.local";
"_ssh._tcp.local";
"_ftp._tcp.local";
"_sftp-ssh._tcp.local";
"_rdp._tcp.local";
"_rfb._tcp.local";
"_mqtt._tcp.local";
"_adb-tls-connect._tcp.local";
"_adb-tls-pairing._tcp.local";
~~~
</p></details>

## wsock.udp 成员列表 <a id="wsock.udp" href="#wsock.udp">&#x23;</a>

### wsock.udp.mdnsClient <a id="wsock.udp.mdnsClient" href="#wsock.udp.mdnsClient">&#x23;</a>
mDNS 客户端，用于局域网零配置设备发现  
使用多播地址 224.0.0.251 端口 5353

### wsock.udp.mdnsClient() <a id="wsock.udp.mdnsClient" href="#wsock.udp.mdnsClient">&#x23;</a>
创建 mDNS 客户端  
可选参数指定本地网卡 IP  

[返回对象:wsockUdpMdnsClientObject](#wsockUdpMdnsClientObject)

## wsockUdpMdnsClientObject 成员列表 <a id="wsockUdpMdnsClientObject" href="#wsockUdpMdnsClientObject">&#x23;</a>

### wsockUdpMdnsClientObject.clearCache() <a id="wsockUdpMdnsClientObject.clearCache" href="#wsockUdpMdnsClientObject.clearCache">&#x23;</a>
清空服务和主机缓存。  
应调用此函数清除连接失败或断线的服务。

### wsockUdpMdnsClientObject.close() <a id="wsockUdpMdnsClientObject.close" href="#wsockUdpMdnsClientObject.close">&#x23;</a>
关闭客户端

### wsockUdpMdnsClientObject.discover(serviceType) <a id="wsockUdpMdnsClientObject.discover" href="#wsockUdpMdnsClientObject.discover">&#x23;</a>
发现指定参数 @serviceType 指定类型的服务。  
参数可指定 "_http","_http._tcp" 或 "_adb-tls-connect._tcp" 等类型名称。  
如果参数指定不包含 `.` 符号的名称，则会自动添加 `._tcp.local` 后缀。  
如果参数指定的名称尾部没有 `.local` 则会自动添加。

### wsockUdpMdnsClientObject.discoverAll() <a id="wsockUdpMdnsClientObject.discoverAll" href="#wsockUdpMdnsClientObject.discoverAll">&#x23;</a>
发现所有可用服务类型

### wsockUdpMdnsClientObject.getServiceByName(instanceName) <a id="wsockUdpMdnsClientObject.getServiceByName" href="#wsockUdpMdnsClientObject.getServiceByName">&#x23;</a>
按实例名获取服务信息

### wsockUdpMdnsClientObject.getServices(serviceType) <a id="wsockUdpMdnsClientObject.getServices" href="#wsockUdpMdnsClientObject.getServices">&#x23;</a>
获取已解析完成的服务列表  
可选按服务类型过滤  
返回包含 ip,port,instanceName 等字段的数组

### wsockUdpMdnsClientObject.hosts <a id="wsockUdpMdnsClientObject.hosts" href="#wsockUdpMdnsClientObject.hosts">&#x23;</a>
已发现的主机缓存（按主机名索引）

### wsockUdpMdnsClientObject.query(serviceName,qtype) <a id="wsockUdpMdnsClientObject.query" href="#wsockUdpMdnsClientObject.query">&#x23;</a>
发送 mDNS 查询  
@serviceName 服务名称  
@qtype 查询类型：1=A, 12=PTR, 16=TXT, 28=AAAA, 33=SRV

### wsockUdpMdnsClientObject.resolveHost(hostname) <a id="wsockUdpMdnsClientObject.resolveHost" href="#wsockUdpMdnsClientObject.resolveHost">&#x23;</a>
解析主机名的 A 记录

### wsockUdpMdnsClientObject.services <a id="wsockUdpMdnsClientObject.services" href="#wsockUdpMdnsClientObject.services">&#x23;</a>
已发现的服务缓存（按实例名索引）

### wsockUdpMdnsClientObject.setInterval(回调函数,延时毫秒数) <a id="wsockUdpMdnsClientObject.setInterval" href="#wsockUdpMdnsClientObject.setInterval">&#x23;</a>
设置定时器

### wsockUdpMdnsClientObject.socket <a id="wsockUdpMdnsClientObject.socket" href="#wsockUdpMdnsClientObject.socket">&#x23;</a>
UDP 异步套接字对象  

[返回对象:udpAsyncClientObject](#udpAsyncClientObject)

## wsockUdpMdnsClientObject 事件列表 <a id="wsockUdpMdnsClientObjectEvent" href="#wsockUdpMdnsClientObjectEvent">&#x23;</a>

### wsockUdpMdnsClientObject.onError(err) <a id="wsockUdpMdnsClientObject.onError" href="#wsockUdpMdnsClientObject.onError">&#x23;</a>

```aardio
wsockUdpMdnsClientObject.onError = function(err){  
	/*错误处理*/  
}
```

### wsockUdpMdnsClientObject.onResponse(info) <a id="wsockUdpMdnsClientObject.onResponse" href="#wsockUdpMdnsClientObject.onResponse">&#x23;</a>

```aardio
wsockUdpMdnsClientObject.onResponse = function(info){  
	/*收到原始响应*/  
}
```

### wsockUdpMdnsClientObject.onServiceRemoved(service) <a id="wsockUdpMdnsClientObject.onServiceRemoved" href="#wsockUdpMdnsClientObject.onServiceRemoved">&#x23;</a>

```aardio
wsockUdpMdnsClientObject.onServiceRemoved = function(service){  
	console.log("服务下线:", service.name, service.ip);/*服务下线告别包回调*/  
}
```

### wsockUdpMdnsClientObject.onServiceResolved(service) <a id="wsockUdpMdnsClientObject.onServiceResolved" href="#wsockUdpMdnsClientObject.onServiceResolved">&#x23;</a>

```aardio
wsockUdpMdnsClientObject.onServiceResolved = function(service){  
	console.log(service.name, service.host, service.ip, service.port);/*发现服务。service 字段说明：  
- name 字段为短实例名，instanceName 为完整实例名。  
- host 为目标主机名，ip,ipv6 分别为目标主机解析到的 IPv4,IPv6 地址。  
- port 为目标主机服务端口。*/  
	console.dump(service.txtMap);  
}
```

