2011-06-04 31 views
0

有誰能夠解釋下面的RMI代碼是如何工作的無存根RMI如何與出存根工作

ReceiveMessageInterface.java 

import java.rmi.*; 

public interface ReceiveMessageInterface extends Remote{ 

    void receiveMessage(String x) throws RemoteException; 

} 

RmiServer.java

import java.rmi.*; 
import java.rmi.registry.*; 
import java.rmi.server.*; 
import java.net.*; 

public class RmiServer extends 
    java.rmi.server.UnicastRemoteObject implements ReceiveMessageInterface{ 
    String address; 
    Registry registry; 

    public void receiveMessage(String x) throws RemoteException{ 
    System.out.println(x); 
    } 

    public RmiServer() throws RemoteException{ 
    try{ 
    address = (InetAddress.getLocalHost()).toString(); 
    } 
    catch(Exception e){ 
    System.out.println("can't get inet address."); 
    } 
    int port=3232; 
    System.out.println("this address=" + address + ",port=" + port); 
    try{ 
    registry = LocateRegistry.createRegistry(port); 
    registry.rebind("rmiServer", this); 
    } 
    catch(RemoteException e){ 
    System.out.println("remote exception"+ e); 
    } 
    } 
    static public void main(String args[]){ 
    try{ 
    RmiServer server = new RmiServer(); 
    } 
    catch (Exception e){ 
    e.printStackTrace(); 
    System.exit(1); 
    } 
    } 
} 

RMIClient.java

import java.rmi.*; 
import java.rmi.registry.*; 
import java.net.*; 

public class RmiClient{ 
    static public void main(String args[]){ 
    ReceiveMessageInterface rmiServer; 
    Registry registry; 
    String serverAddress=args[0]; 
    String serverPort=args[1]; 
    String text=args[2]; 
    System.out.println 
    ("sending " + text + " to " +serverAddress + ":" + serverPort); 
    try{ 
    registry=LocateRegistry.getRegistry 
    (serverAddress,(new Integer(serverPort)).intValue()); 
    rmiServer=(ReceiveMessageInterface)(registry.lookup("rmiServer")); 
    // call the remote method 
    rmiServer.receiveMessage(text); 
    } 
    catch(RemoteException e){ 
    e.printStackTrace(); 
    } 
    catch(NotBoundException e){ 
    System.err.println(e); 
    } 
    } 
} 
+0

@ user625146同意 – 2011-06-04 17:01:09

+0

只是說明你的下一個問題:請使用一些代碼縮進,以使其更具可讀性。大多數IDE(以及其他一些編輯器)都具有自動縮進的功能。 – 2011-06-05 01:52:05

回答

0

用途java.reflect.Proxy合成在運行時實現接口

+0

它在兩臺不同的機器上工作嗎? – sanu 2011-06-04 17:01:52

+0

是的。像我記得你必須做一些訪問策略配置,但很久以前我已經做到了......對不起,使用動態存根 – 2011-06-04 17:04:20

+0

感謝@Op德Cirkel – sanu 2011-06-04 17:13:00

0

所有您需要做的是提供一個端口號參數,甚至爲0,建造或導出時。只需在上面的代碼中的構造函數中添加super(0)即可。

+0

@downvoter請解釋。這裏沒有錯誤。 – EJP 2013-07-29 21:44:38