2016-05-07 26 views
0

我正在學習RMI,並且我做了一個使用代碼庫的基本程序。RMI與不同的PC

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
import java.rmi.server.UnicastRemoteObject; 

public class Server implements sInterface,s2int { 

public void go() 
{ 
    System.out.println("GO"); 
} 
public void doIt() 
{ 

} 

public static void main(String[] args) 
{ 
    if(System.getSecurityManager()==null) 
    { 
     System.setSecurityManager(new SecurityManager()); 
    } 
    try 
    { 
    System.setProperty("java.rmi.server.hostname","helios"); 
     String s = "SERVER"; 
     Registry r = LocateRegistry.getRegistry(); 

     sInterface stub = (sInterface) UnicastRemoteObject.exportObject(new Server(),0); 
     r.rebind(s,stub); 

    }catch(Exception x){x.printStackTrace();} 
} 
} 

客戶:

public class Client { 

public static void main(String[] args) 
{ 
    if(System.getSecurityManager()==null) 
    { 
     System.setSecurityManager(new SecurityManager()); 
    } 

    try{ 

     String name = "SERVER"; 
     Registry r = LocateRegistry.getRegistry(args[0]); 
     sInterface inf = (sInterface)r.lookup(name); 
     inf.go(); 

    }catch(Exception x) 
    { 
     x.printStackTrace(); 
    } 
} 
} 

客戶端沒有 's2int' 接口和從代碼庫下載。是 用於啓動服務器和客戶端模塊的命令如下:

java -Djava.rmi.server.codebase=http://helios/~owner/rmi.jar 
-Djava.security.policy=server.policy Server   


java -Djava.security.policy=client.policy  
-Djava.rmi.server.codebase=http://helios/~owner/  
-Djava.rmi.server.hostname=helios Client localhost 

現在,這個工程時,服務器和客戶端是在同一臺PC上,但是當我試圖運行一個不同的PC上同一個網絡,我得到了一個

java.rmi.ConnectException: Connection refused to host: localhost; nested  exception is: 
    java.net.ConnectException: Connection refused: connect 
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) 
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) 
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) 
    at sun.rmi.server.UnicastRef.newCall(Unknown Source) 
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) 
    at Client.main(Client.java:20) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at   
sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S 
ource) at  
sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S 
ource) 
    ... 6 more 

我不是很瞭解網絡。任何人都可以解釋爲什麼它不工作?

回答

1

您的客戶正在查找錯誤的註冊表。它需要在服務器主機上查找註冊表,而不是它自己的本地主機。

+0

我該怎麼做?我必須將服務器主機的公共IP地址傳遞給lookup()方法嗎? - 我嘗試過,但沒有奏效。 –

+0

哦,等等,結果我輸入了錯誤的IP地址。我從ifconfig輸入了IP地址,現在它正在工作。 –

+0

你應該考慮upvoting和/或接受你在這裏找到有用的答案。 – EJP