问题描述
我正在构建一个托管服务器的应用程序。
使用 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 (将#修改为@)