我正在编写一个java应用程序,我需要在任何有线或无线本地网络上快速发现任何其他正在运行的客户端,以便建立TCP连接.
这样做的最佳方法是什么?是否有可以执行此操作的库或代码片段?
多播UDP是一种很好的方法.它用于支持通过本地IP网络(UPnP和ZeroConf)自动发现联网设备的几种技术.
多播UDP不是TCP,但它仍然基于IP,因此使用相同的寻址机制,即IP地址.通常将其与无线电广播进行比较,即多播发送器仅需要发送1个消息(即,它就像广播),但只有"调入"多播信道的客户端才会接收它.
您可以在谷歌或维基百科上快速搜索这些作为入门者,但基本思路如下:
当客户端启动时,它向一些预先指定的多播地址和端口发送多播UDP"hello"消息(例如UPnP使用239.255.255.250:1900)
现有客户端正在侦听指定地址和端口上的传入多播"hello"消息 - 当客户端收到一个消息时,它会向发送方发送响应
发送"hello"消息的客户端从网络上的每个现有客户端接收响应,现在知道每个客户端的IP地址
如果你正在寻找可以使用的库,UPnP库往往会有点重量级,很多人通常不喜欢它们,所以ZeroConf可能会更合适一些.我不知道这些东西的任何java实现,但我相信你可以找到一些有点挖掘.