- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
不久前,我开发了一个小型局域网聊天应用程序。在 Java 中允许与其他主机聊天、发送图像等。虽然它只是为了好玩而创建的,但现在它正在我工作的地方使用。
目前,应用程序上没有“聊天服务器”。每个客户端在哪里注册、更新它的状态等(我喜欢对称设计的想法,而不是依赖于在其他机器上运行的服务器)。
相反,每个主机都是一个客户端/服务器,它有一个包含其他主机主机名的 hosts.properties 文件,并且 - 例如 - 在发送大量消息时向每个主机广播/图片/随便。
一开始只有几个主机,所以这个 hosts.properties 文件不是问题。但随着用户数量的增加,更新该文件的需求有点令人望而生畏。所以现在我决定摆脱它,每次应用程序。开始,动态地找到其他 Activity 主机。
但是,我找不到实现它的正确方法。我试过启动不同的线程,每个线程都在已知 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 ( address.isReachable(CONNECTION_TIME_OUT) )
// host found!
}
但是:
所以...我想有更好的方法来解决这个问题,但我找不到。有什么建议吗?谢谢!
最佳答案
您可以尝试将 UDP 广播到特定端口。您的应用程序在网络上的所有运行实例都可以监听该端口,然后用将它们标识为主机的消息进行响应。
关于java - 用Java动态查找局域网中的其他主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3050221/
在谈论 UDP 时,我看到/听到了几次拥塞。这是什么意思? 最佳答案 拥塞是指当您尝试在有限带宽上发送过多数据时,它发送数据的速度无法比传入数据快,因此会丢弃额外的数据包。 发生拥塞时,您可以看到这些
我想让 Xdebug 在办公室的 LAN 上以半安全的方式运行。我们当前的设置如下: 192.168.1.1 下 LAN 网络上的本地服务器与 Ubuntu Server 16 在 Ubuntu 服务
我是一名优秀的程序员,十分优秀!