使用 Node 和 Android NSD 的 Bonjour

问题描述

我正在构建一个托管服务器的应用程序。

使用 npm 包 bonjour 我开始服务发现..

const bonjour = require('bonjour')()

let bonjourOptions = {
     name: 'MyApplication',port: 8000,type: 'http'
};

bonjour.publish(bonjourOptions);

然后我开始使用不同的节点应用程序寻找该服务,我们将其称为客户端应用程序..

bonjour.find( { type: 'http'},(service) => {
     console.log('Found service: ',service);
});

这有效,我可以找到 MyApplication 的实例并毫无问题地连接到它。

然后,我希望一个 android 应用程序也能够使用本机 android 网络服务发现协议发现此服务,如下所示..

var SERVICE_TYPE = "_http._tcp."

var nsdManager = getSystemService(Context.NSD_SERVICE) as NsdManager

nsdManager.discoverServices(SERVICE_TYPE,NsdManager.PROTOCOL_DNS_SD,discoveryListener)

// Create the callback listener
private val discoveryListener = object : NsdManager.DiscoveryListener {
    override fun onDiscoveryStarted(regType: String) {
        Log.d(TAG,"Discovery started. Looking for: $regType")
    }
    override fun onServiceFound(service: NsdServiceInfo) {
        Log.d(TAG,"Service found. Service: $service")
    }
    override fun onServiceLost(service: NsdServiceInfo) {
        Log.d(TAG,"Service lost. Service: $service")
    }
    override fun onDiscoveryStopped(serviceType: String) {
        Log.d(TAG,"Discovery stopped")
    }
    override fun onStartDiscoveryFailed(serviceType: String,errorCode: Int) {
        Log.d(TAG,"Discovery failed to start. Error: $errorCode")
    }
    override fun onStopDiscoveryFailed(serviceType: String,"Discovery failed to stop. Error: $errorCode")
    }
}

此时 logcat 将显示 onServiceFound 块运行并记录“_http.tcp”。作为它正在侦听的服务。就代码而言,这是永远找不到服务的。

将 android SERVICE_TYPE 更改为“_services._dns-sd._udp”将返回一些服务,这些服务都不是 Node 服务器应用程序。

我不认为问题出在服务器应用程序中,因为客户端应用程序可以毫无问题地找到服务器传输的服务。

在服务器中设置服务类型为'_http._tcp'。和android中的SERVICE_TYPE相同没有返回任何结果。

将服务器中的服务类型设置为“http”,将 android 中的 SERVICE_TYPE 设置为“_http._tcp”。不返回任何结果。

Android 应用程序在与我的服务器计算机连接到同一网络的物理设备上运行。

在 Mac 或 Microsoft 机器上运行服务器应用程序对结果没有影响。节点应用总是能找到彼此,Android 应用永远找不到任何东西。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...