import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
public class ShowBindings {
public static void main(String[] args) throws NamingException {
Context namingContext = new InitialContext();
NamingEnumeration<NameClassPair> e = namingContext.list("rmi:");
while (e.hasMore()) {
System.out.println(e.next().getName());
}
}
}
_______________________________________________________________________________________
RMIClient目錄的文件:Product.java, ProductClient.java, client.policy, download/Product.class
// Product.java與服務器端的Product.java一樣。
// ProductClient.java
import java.rmi.RMISecurityManager;
import javax.naming.Context;
import javax.naming.InitialContext;
public class ProductClient {
public static void main(String[] args) {
System.setProperty("java.security.policy", "client.policy");
System.setSecurityManager(new RMISecurityManager());
try {
String url = "rmi://localhost/";
Context namingContext = new InitialContext();
Product p1 = (Product) namingContext.lookup(url + "toaster");
Product p2 = (Product) namingContext.lookup(url + "microwave");
System.out.println(p1.getDescription());
System.out.println(p2.getDescription());
} catch (Exception e) {
e.printStackTrace();
}
}
}
// client.policy
grant {
permission java.net.SocketPermission
"*:1024-65535", "connect";
};
_______________________________________________________________________________________
運行步驟:
1. 啟動RMI注冊表
進入RMIServer目錄,使用命令:rmiregistry &
(退出rmiregistry命令:killall rmiregistry,重新注冊對象的時候要重啟RMI注冊表)
2.1 啟動服務器:
進入RMIServer目錄,使用命令:java ProductServer &
(退出服務器程序,ctr + c, 但還要使用再使用一次killall java, 否則再次啟動服務器會報異常)
[2.2] 測試注冊好的對象:
進入RMIServer目錄,使用命令:java ShowBindings
3. 啟動客戶端:
java ProductClient
觀察終端輸出的結果。