我正在编写一些代码,用于从连接到同一网络的计算机发送/接收信息。我有一种方法可以在那个时刻获取在线计算机的IP,但是当新的IP出现/消失时我需要刷新列表。
我认为没有线程并且调用该方法的while (true)
是最佳解决方案。我想不出别的什么 - 有什么建议吗?
以下是我用于搜索网络上活动计算机的代码示例:
public List<String> searchApps() {
List<AddressServiceTypePair> ip = this.networkController.getDiscovered(); //returns an ArrayList<AddressServiceTypePair>
onlineApps.clear();
for (AddressServiceTypePair service : ip) {
onlineApps.add(service);
}
List<String> list = new ArrayList<>();
for (AddressServiceTypePair aux : onlineApps) {
list.add(aux.getIP());
}
return list;
}
答案 0 :(得分:1)
很难根据发布的不明确的代码示例进行概括。但是,我假设您正在编写某种类型的客户端和服务器代码。没有简单的方法可以通知网络上添加/删除的计算机。如果您需要一个最新的时刻 IP列表,我会感到惊讶。您可以将您的IP发现方法置于无限循环中,只需在循环中包含Thread.sleep(milliseconds);
。
如果你确实需要非常新的信息,你可以让每个连接的计算机也连接到另一个端口上的Socket,然后尝试从Socket中读取 - 这样你会得到一个异常Socket关闭后不久您可以在创建套接字时添加客户端的IP,然后您的catch块可以在Socket关闭时更新您的活动IP列表,表明客户端已不再连接。