在wifi网络上发现客户

时间:2009-07-21 11:48:17

标签: java networking tcp

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

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

4 个答案:

答案 0 :(得分:8)

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

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

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

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

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

答案 1 :(得分:1)

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

HTH。

答案 2 :(得分:0)

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

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

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

或者您发送广播(通常会定位到x.x.x.255)并查看谁回答。 请参阅Datagram BroadcastingMulticasts。但我认为这不再是TCP / IP了。

答案 3 :(得分:0)

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

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

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