我正在编写一个java应用程序,我需要在任何有线或无线本地网络上快速发现任何其他正在运行的客户端,以便建立TCP连接。
这样做的最佳方法是什么?是否有可以执行此操作的库或代码片段?
答案 0 :(得分:8)
多播UDP是一种很好的方法。它用于支持通过本地IP网络(UPnP和ZeroConf)自动发现联网设备的几种技术。
多播UDP不是TCP,但它仍然基于IP,因此使用相同的寻址机制,即IP地址。通常将其与无线电广播进行比较,即多播发送器仅需要发送1个消息(即,它就像广播),但只有被“调入”到多播信道的客户端才会接收它。
你可以在谷歌或维基百科上快速搜索这些作为入门者,但基本思路如下:
如果您正在寻找可以使用的库,UPnP库可能会有点重量级,很多人通常不喜欢它们,所以ZeroConf可能更合适一些。我不知道这些东西的任何java实现,但我相信你可以找到一些有点挖掘。
答案 1 :(得分:1)
网络扫描可能会很长,甚至在无线网络上也会更长。如果您通过Java快速需要它们,您可以在网络上实现“会合点”服务器。此服务器侦听预定义的端口,客户端在启动时在服务器上注册,服务器可以根据请求分发有关客户端的信息。
HTH。
答案 2 :(得分:0)
我猜您需要在子网中所有IP上的应用程序端口上进行扫描。
什么是可用的IP - 或者你的子网是什么?
我担心这可能会变得不可能,因为网络设计对您的应用程序是透明的。
所以,我会使用蛮力:选择你的IP并更改最后一个字节。可能太多了,但可能还不够。
或者您发送广播(通常会定位到x.x.x.255)并查看谁回答。 请参阅Datagram Broadcasting和Multicasts。但我认为这不再是TCP / IP了。
答案 3 :(得分:0)