我的分布式应用程序,具有多个主机,需要在同一局域网内找到本地服务器。
我使用 NsdManager 检测本地服务器取得了有限的成功,这是可行的方法,但通常情况下,服务器仍未检测到。我正在寻找更好的解决方案,更可靠的解决方案。
然后我尝试多播 UDP 数据包,我在同一进程中检测到它没有问题。 (我的单元测试同时使用客户端和服务器实例)。那很好用。相同的类不允许我的客户端检测到我在同一设备上运行的服务器(客户端和服务器是单独的进程应用程序)。
然后我使用广播地址改变了我的方法,同样,在同一个进程中,单元测试很好,但在两个不同的进程中,找不到服务器。
正如我所说,代码在同一个进程中运行良好,但在两个不同的进程中运行时,或者在同一 LAN 中的两个不同的客户端/服务器主机上运行时,它们不起作用。
注意:我的局域网是高端WiFi rooter,没有特殊设置。
有人知道可能是什么问题吗?
请注意,我的 list 包括客户端和服务器应用程序的这些设置:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
请注意,为了让我的客户端检测在同一主机上运行的服务器,我已经在使用 TCP 套接字,但我需要检测我的 LAN 中的任何服务器。
最佳答案
UDP 通信不能依赖于任何类型的进程。问题出在您的代码上。
关于java - 如何在 Android 上使用 UDP 数据报在两个进程和两个主机之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47358843/