读书人

带来调的RMI实例

发布时间: 2012-11-01 11:11:32 作者: rapoo

带回调的RMI实例

1 服务端远程接口

?

?public interface RMITest2I extends Remote {

?

public void registerClient(RMITest2ClientI client)throws RemoteException;

public void unregisterClient(RMITest2ClientI client)throws RemoteException;

}

?

2服务端实现

?public class RMITest2 extends UnicastRemoteObject implements RMITest2I,Runnable {

private HashSet client;

public RMITest2()throws RemoteException {

client=new HashSet();

}

?

public void registerClient(RMITest2ClientI client) throws RemoteException {

this.client.add(client);

?

}

?

public void unregisterClient(RMITest2ClientI client) throws RemoteException {

? ?this .client.remove(client);

}

?

public void run() {

for(;;){

Iterator iter=client.iterator();

while(iter.hasNext()){

RMITest2ClientI client=(RMITest2ClientI) iter.next();

try {

client.getPerfectTime();

} catch (Exception e) {

System.out.println("移出无效对象");

iter.remove();

}

try {

Thread.sleep(1000);

} catch (Exception e) {

? ?}

}

}

}

public static void main(String[] args) {

try {

if(System.getSecurityManager()==null){

System.setSecurityManager(new SecurityManager());

}

RMITest2 rt=new RMITest2();

Naming.bind("localhost/RMITest2", rt);

System.out.println("bind OK");

new Thread(rt).start();

} catch (Exception e) {

e.printStackTrace();

}

}

?

?

3 客户端接口

??public interface RMITest2ClientI extends Remote{

?

public void getPerfectTime()throws RemoteException;

}



4客户端实现
?public class RMITest2Client extends UnicastRemoteObject implements RMITest2ClientI{
protected RMITest2Client() throws RemoteException {super();}
public void getPerfectTime() throws RemoteException {System.out.println("perfect time"+System.currentTimeMillis());}public static void main(String[] args) {try {if(System.getSecurityManager()==null){System.setSecurityManager(new SecurityManager());} ? ?RMITest2ClientI client=new RMITest2Client();RMITest2I rt=(RMITest2I)Naming.lookup("localhost/RMITest2");System.out.println("服务端回调");rt.registerClient(client);} catch (Exception e) {e.printStackTrace();}}}

编译所有文件 Start rmiregistry运行服务端 ?bind OK运行客户端输出:?服务端回调perfect time1303724206971perfect time1303724207974perfect time1303724208977perfect time1303724209980perfect time1303724210984perfect time1303724211987perfect time1303724212990perfect time1303724213995perfect time1303724214998perfect time1303724216001perfect time1303724217004perfect time1303724218007perfect time1303724219010

读书人网 >编程

热点推荐