開發環境:MyEclipse8.5
服務器ip爲192.168.1.100
客戶端ip爲192.168.1.101
服務器初始目錄結構:
src/com/syslink
| server
|-------TaskInfo.java (接口)
|-------TaskDispatcher.java (接口)
|-------TaskInfoImpl.java (實現TaskInfo接口)
|-------TaskDispatcherImpl.java (實現TaskDispatcher接口)
|-------Server.java (啓動RMI服務器)
bin/com/syslink
| server
|-------TaskInfo.class
|-------TaskDispatcher.class
|-------TaskInfoImpl.class
|-------TaskDispatcherImpl.class
|-------Server.class
客戶端初始目錄結構:
src/com/syslink
| server
|-------TaskInfo.java (接口,同服務器下的接口文件)
|-------TaskDispatcher.java (接口,同服務器下的接口文件)
| client
|-------Client.java (啓動RMI客戶端)
bin/com/syslink
| server
|-------TaskInfo.class
|-------TaskDispatcher.class
| client
|-------Client.class
1:服務器端運行RMIC(我機子上位於C:\Program Files\Java\jdk1.6.0_12\bin)生成stub文件
必須在src目錄下執行以下兩句:
src>RMIC com.syslink.server.TaskInfoImpl
src>RMIC com.syslink.server.TaskDispatcherImpl
運行完後在
com/syslink/server目錄下將新增兩個文件:TaskInfoImpl_Stub.class 和 TaskDispatcherImpl_Stub.class
(如果在RMIC命令中加-keep參數,還會生成另兩個文件TaskInfoImpl_Stub.java和 TaskDispatcherImpl_Stub.java,最好看一下里面的繼承關係,加深理解)
(如果出現找不到類的情況,請添加classpath參數,如:RMIC -classpath . com.syslink.server.TaskInfoImpl )
2:將1中生成的兩個*Impl_Stub.class文件拷貝到服務器bin/com/syslink/server和客戶端bin/com/syslink/server目錄下
3:分別在服務器和客戶端的bin/com/syslink/server目錄下建一個server.policy文件,內容爲:
grant {
permission java.security.AllPermission "", "";
};
(內容可以根據實際情況改,這裏表示允許客戶端做任何事)
4:服務器端運行start rmiregistry
5:服務器端運行Server
記得在server的啓動代碼里加上System.setProperty ("java.security.policy", EmailSendServer.class.getResource("server.policy").toString ()); 否則將出現“Access Denied。。。”錯誤
6:客戶端運行Client
跟運行Server一樣,加上System.setProperty ("java.security.policy", EmailSendClient.class.getResource("server.policy").toString ()); 否則將出現“Access Denied。。。”錯誤
7:最後的目錄結構爲:
服務器最終目錄結構:
src/com/syslink
| server
|-------TaskInfo.java (接口)
|-------TaskDispatcher.java (接口)
|-------TaskInfoImpl.java (實現TaskInfo接口)
|-------TaskDispatcherImpl.java (實現TaskDispatcher接口)
|-------Server.java (啓動RMI服務器)
|-------TaskInfoImpl_Stub.class (刪除也沒關係)
|-------TaskDispatcherImpl_Stub.class (刪除也沒關係)
bin/com/syslink
| server
|-------TaskInfo.class
|-------TaskDispatcher.class
|-------TaskInfoImpl.class
|-------TaskDispatcherImpl.class
|-------Server.class
|-------TaskInfoImpl_Stub.class
|-------TaskDispatcherImpl_Stub.class
|-------server.policy
客戶端最終目錄結構:
src/com/syslink
| server
|-------TaskInfo.java (接口,同服務器下的接口文件)
|-------TaskDispatcher.java (接口,同服務器下的接口文件)
| client
|-------Client.java (啓動RMI客戶端)
bin/com/syslink
| server
|-------TaskInfo.class
|-------TaskDispatcher.class
|-------TaskInfoImpl_Stub.class
|-------TaskDispatcherImpl_Stub.class
| client
|-------Client.class
|-------server.policy