PROTOCOL_MDNS
时间: 2023-06-23 22:43:19 浏览: 57
很抱歉,我之前的回答有误。在Android的NSD框架中,使用的是`NsdManager.PROTOCOL_DNS_SD`常量来表示使用mDNS协议进行服务发现,而不是`NsdManager.PROTOCOL_MDNS`。
因此,正确的代码应该如下所示:
```java
nsdManager.discoverServices("_http._tcp", NsdManager.PROTOCOL_DNS_SD, discoveryListener);
```
其中,第一个参数是要发现的服务类型,第二个参数是协议类型常量,这里使用了`NsdManager.PROTOCOL_DNS_SD`表示使用mDNS协议进行服务发现。
相关问题
nsdManager.discoverServices如何选择mdns协议
要使用mDNS协议来发现网络服务,可以使用Android的NSD API中的discoveryListeners参数。具体来说,您需要创建一个NsdManager.DiscoveryListener对象,并在其onStartDiscovery()方法中指定协议类型为PROTOCOL_MDNS,然后将该对象作为discoveryListeners参数传递给nsdManager.discoverServices()方法。
以下是使用mDNS协议发现网络服务的示例代码:
```
NsdManager nsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onStartDiscovery(String serviceType) {
nsdManager.discoverServices(serviceType, NsdManager.PROTOCOL_MDNS, discoveryListener);
}
//...
};
nsdManager.discoverServices("_http._tcp", NsdManager.PROTOCOL_MDNS, discoveryListener);
```
在上面的代码中,我们创建了一个名为_discoveryListener的NsdManager.DiscoveryListener对象,并在其onStartDiscovery()方法中指定协议类型为PROTOCOL_MDNS。然后,我们调用nsdManager.discoverServices()方法来开始发现_http._tcp服务,同时将_discoveryListener对象作为discoveryListeners参数传递给该方法。
请注意,使用mDNS协议发现网络服务需要在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
```
同时,您还需要在gradle.build文件中添加以下依赖项:
```
implementation 'androidx.jmdns:jmdns:3.5.5'
```
这是因为Android的NSD API并不直接支持mDNS协议,而是使用第三方库jmdns来实现该协议。
lwip mdns c语言实现
lwIP是一个轻量级的TCP/IP协议栈,可以用于嵌入式系统的网络连接。而mDNS(多播DNS)是一种基于UDP的服务发现协议,用于在局域网中发现设备和服务。
在C语言中实现lwIP的mDNS功能,可以按照以下步骤进行:
1. 配置lwIP:首先,需要在lwIP配置文件中启用mDNS功能。可以通过修改lwipopts.h文件中的宏定义来实现。确保以下宏定义已启用:
```c
#define LWIP_MDNS_RESPONDER 1
#define LWIP_DNS_SD 1
```
2. 实现mDNS API:lwIP提供了一组API函数,用于实现mDNS服务。下面是几个常用的API函数:
- mdns_resp_init():初始化mDNS响应器。
- mdns_resp_add_netif():将网络接口添加到mDNS响应器。
- mdns_resp_announce():向局域网中的其他设备广播mDNS消息。
- mdns_resp_remove_netif():从mDNS响应器中移除网络接口。
这些API函数可以通过调用lwip/mdns.h头文件来访问。
3. 注册服务:使用mdns_resp_add_service()函数注册要提供的服务。该函数需要提供服务名称、服务类型、端口号等参数。
4. 启动mDNS响应器:调用mdns_resp_start()函数来启动mDNS响应器,开始监听和响应mDNS消息。
在实际的代码中,需要在合适的地方调用这些API函数来实现mDNS功能。具体的实现方式可能会依赖于具体的嵌入式系统和使用的lwIP版本。可以参考lwIP的文档和示例代码来了解更多细节和示例用法。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)