在wifi网络上发现客户端

我正在编写一个java应用程序,我需要在任何有线或无线本地网络上快速发现任何其他正在运行的客户端,以便建立TCP连接。

这样做的最佳方法是什么? 是否有可以执行此操作的库或代码片段?

我想你需要在子网中所有IP上的应用程序端口上进行扫描。

什么是可用的IP – 或者你的子网是什么?
我担心这可能会变得不可能,因为网络设计对您的应用程序是透明的。

所以,我会使用蛮力:选择你的IP并更改最后一个字节。 可能太多了,但可能还不够。

或者您发送广播(通常以xxx255为目标)并查看谁回答。 请参阅数据报广播和多播 。 但我认为这不再是TCP / IP了。

多播UDP是一种很好的方法。 它用于支持通过本地IP网络(UPnP和ZeroConf)自动发现联网设备的几种技术。

多播UDP不是TCP,但它仍然基于IP,因此使用相同的寻址机制,即IP地址。 通常将其与无线电广播进行比较,即多播发送器仅需要发送1个消息(即,它就像广播),但只有被“调入”到多播信道的客户端才会接收它。

您可以在谷歌或维基百科上快速搜索这些作为入门者,但基本思路如下:

  • 当客户端启动时,它向一些预先指定的多播地址和端口发送多播UDP“hello”消息(例如UPnP使用239.255.255.250:1900)
  • 现有客户端正在侦听指定地址和端口上的传入多播“hello”消息 – 当客户端收到一个消息时,它会向发送方发送响应
  • 发送“hello”消息的客户端从网络上的每个现有客户端接收响应,现在知道每个客户端的IP地址

如果你正在寻找使用的库,UPnP库往往有点重量级,很多人通常不喜欢它们,所以ZeroConf可能更适合。 我不知道这些东西的任何java实现,但我相信你可以找到一些有点挖掘。

网络扫描可能非常长,甚至更长时间在无线网络上。 如果您通过Java快速需要它们,您可以在网络上实现“会合点”服务器。 此服务器侦听预定义端口,客户端在启动时在服务器上注册,服务器可以根据请求分发有关客户端的信息。

HTH。

有一个JGroups工具包可用于可靠的多播通信。 它允许使用多播技术自动发现其他客户端,如其他答案中所述。

它还在多播套接字之上提供通信API。

它被用于许多项目,如JBoss,Tomcat等,以提供分布式缓存的基础结构。 在这里查看更多。