在过去的几周里,Android的NSD实现让我发疯:
从用户的角度来看,出现以下问题:
设备以完全不确定的方式发现彼此.如果我启动NsdManager基于应用程序的应用程序,如果只涉及两个设备,它或多或少会起作用.如果第三个设备加入,它将很少发现前两个,前两个将不会看到第三个.如果我退出应用程序(它们优雅地取消注册NSD侦听器)并以不同的顺序重新启动它们,则发现模式不完全相同,但类似.
在我的家庭网络中,发现的设备的IP分辨率基本上按预期工作.在工作中,有时即使仅使用两个设备(A和B),设备A也将使用A的IP地址和B的端口解析设备B的服务,反之亦然.所以IP地址和服务名称似乎在较低级别(可能是NsdManager)混淆了.
我现在已经为此提交了有关Google代码的错误报告(https://code.google.com/p/android/issues/detail?id=201314&thanks=201314&ts=1455814995).我也在这里发帖,希望得到更多的反馈; 也许我的Nsd助手类错了.
首先,经过无休止的调试,我现在已经在logcat中发现Android底层NsdService本身可能出现故障的提示,而MDnsDS似乎正常工作.但我不确定......
这里有一些日志输出来说明问题(为了便于阅读,过滤了一些消息):
02-18 16:57:02.327: D/NsdService(628): startMDnsDaemon
02-18 16:57:02.327: D/MDnsDS(187): Starting MDNSD
02-18 16:57:02.529: D/NsdService(628): New client listening to asynchronous messages
02-18 16:57:02.529: D/NsdService(628): New client, channel: com.android.internal.util.AsyncChannel@1fa188ce messenger: android.os.Messenger@cca33ef
02-18 16:57:02.532: D/NsdService(628): Register service
02-18 16:57:02.532: D/NsdService(628): registerService: 106 name: TuSync-0.57392, type: _tusync._tcp., host: /::, port: 57392
02-18 16:57:02.533: D/MDnsDS(187): serviceRegister(106, (null), TuSync-0.57392, _tusync._tcp., (null), (null), 57392, 0, <binary>)
02-18 16:57:02.533: D/MDnsDS(187): serviceRegister successful …Run Code Online (Sandbox Code Playgroud)