Fed*_*ina 6 java networking chat
前段时间我开发了一个小的局域网聊天应用程序.在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 ( address.isReachable(CONNECTION_TIME_OUT) )
// host found!
}
Run Code Online (Sandbox Code Playgroud)
然而:
所以...我想有更好的方法来解决这个问题,但我找不到它.有什么建议?谢谢!
| 归档时间: |
|
| 查看次数: |
7621 次 |
| 最近记录: |