【发布时间】:2011-02-13 16:30:29
【问题描述】:
我正在使用 RMI 用 Java 编写服务器/客户端程序。当服务器崩溃时,这不是问题,客户端会收到 RemoteException 并断开连接。
但是当客户端崩溃时我会遇到问题。我的服务器使用 Timer 不时 ping 所有客户端对象,当它没有连接到客户端时,它会捕获 RemoteException。
然后,它应该从服务器中删除客户端对象(只需从列表中删除它),但这是不可能的,因为当我尝试对代理客户端对象执行任何操作时,它会抛出另一个 RemoteException。我该如何解决这个问题?
List<User> users;
Map<User, IClient> clients;
class PingClients extends TimerTask {
public void run() {
for (IClient client : clients.values())
try {
client.ping();
} catch (RemoteException e) {
//removeClient(client); GENERATES REMOTEEXCEPTION
}
}
}
public boolean removeClient(IClient c) throws RemoteException{
User u = c.getUser();
users.remove(u);
clients.remove(u);
for (IClient client : clients.values())
client.updateUsers(users);
}
【问题讨论】:
-
请向我们展示您如何遍历客户端代理并将其从列表中删除。使用迭代器进行迭代,并使用它的 remove 方法从列表中删除当前代理不应抛出任何 RemoteException。
-
您仍然没有向我们展示您是如何删除客户的。 removeClient 方法的内容是什么?