【发布时间】:2019-07-13 17:39:18
【问题描述】:
我正在开发一个 Java 应用程序,人们可以使用它在网络上的设备之间发送数据。每个安装了代码的设备都在运行一个 TCP 服务器,并在某个端口上监听。现在我希望用户可以选择“扫描”网络以查找运行我的代码的其他设备,并在屏幕上显示一个列表以选择将数据发送到哪个设备。
如何找到运行我的代码的设备?
我只能想到两种方法:
- 尝试连接到特定端口上的所有可能 IP,但这似乎需要很长时间
- 使用您的 IP 在不同端口上启动 UDP 广播并让其他端口响应,但这需要运行两台服务器并打开两个端口
那么请问您,有没有更好的方法来实现这一点?
谢谢。
【问题讨论】:
-
多播 DNS 可能是一个选项。
-
研究“八卦协议”。每个服务器都可以跟踪它的邻居。因此,新服务器可能想要尝试一系列 IP 地址,但是当它找到一个对等点时,该对等点可以告诉它其他已知的服务器 ip。
-
查看 bonjour/zeroconf
-
设备可以订阅特定的组播组。请不要为此滥用广播,因为它会中断 LAN 上的每个主机,而不仅仅是您想要的特定主机。
标签: java javafx networking tcp server