java - 如何在 Android 上使用 UDP 数据报在两个进程和两个主机之间进行通信

标签 java android udp broadcast multicast

我的分布式应用程序,具有多个主机,需要在同一局域网内找到本地服务器。

我使用 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/

相关文章:

python - 使用 Python Twisted 进行 UDP 流量控制

linux - 在哪里可以找到 UDP 的 Linux 实现的源代码?

java - 使用 jdbc 作为列表获取整行

android - EditText中的多种语言,不带特殊字符

android - 如何使用输入数组在GraphView库中绘制图形?

JAVA SQLite : Error Bad Request Field

python - msgpack 能否提供更好的性能和与 python 的 struct.pack() 相同的功能?

java - Codenvy:无法运行简单的 Hello World java 程序

java - GWT RPC 警告 : servlet has mapping, 但 web.xml 没有对应的映射

java - 具有绑定(bind)服务的 Activity 生命周期