前段时间我开发了一个小的局域网聊天应用程序.在Java中允许与其他主机聊天,发送图像等.虽然它是为了娱乐而创建的,但现在它被用于我工作的地方.
目前,应用程序上没有"聊天服务器".每个客户注册,更新它的状态等等(我喜欢对称设计的想法,而不依赖于在其他机器上运行的服务器).
相反,每个主机都是一个客户端/服务器,它有一个hosts.properties文件,其中包含其他主机的主机名,并且 - 例如 - 在发送大量消息/图像/其他内容时向每个主机广播.
一开始只有几个主机,所以这个hosts.properties文件不是问题.但随着用户数量的增加,更新该文件的需求有点令人生畏.所以现在我决定摆脱它,每次应用程序.启动,动态地找到其他活动主机.
但是,我找不到正确的实现方法.我尝试启动不同的线程,每个线程都在一个已知的IP地址范围内搜索其他主机.像这样的东西(为了便于阅读而简化):
/** HostsLocator */
public static void searchForHosts(boolean waitToEnd) {
for (int i=0; i < MAX_IP; i+= MAX_IP / threads) {
HostsLocator detector = new HostsLocator(i, i+(MAX_IP / threads - 1)); // range: from - to
new Thread(detector).start();
}
}
public void run() {
for (int i=from; i<=to; i++)
findHosts( maskAddress + Integer.toString(i) );
}
public static boolean findHosts(String IP) {
InetAddress address = InetAddress.getByName(IP);
if …Run Code Online (Sandbox Code Playgroud) 我现在正在将 DNS-DS 库“ mdnsjava ”实现到我的 Android 项目中,正如在多个位置提到的那样,例如在这里:
除了 JMDNS 之外,还有其他用于 bonjour/zeroconf 的 Java 库吗?。
在实现时,我想知道这个实现是否真的使用了任何缓存和/或它的性能有多稳定。
现在我在过去的两年里一直在使用 jmDNS,但是这个库在暂停发现(应用程序在后台)时无法保留缓存。
此外,jmDNS 在发现设备时速度缓慢且不稳定。
那么,有人有mdnsjava的经验吗?
我正在使用Objective-C和Java,但我认为这个问题与语言无关.
我有一个iOS客户端通过TCP/IP与Java服务器通信.现在我需要告诉至少一方当事人的IP地址.有没有一种标准方式可以"发现"IP地址(从一方或另一方)?
此外,如何切换到UDP会影响答案?