2012-09-22 130 views
5

我在新的Java RMI技術。我遇到了其他程序員已有的問題,但我無法理解他們在教程中做了什麼以解決問題。 我已經用Java RMI實現了遊戲「tic tac toe」。 這裏ControllerServer代碼連接被拒絕在127.0.1.1的Java RMI

public ControllerServer() { 

    try { 
     game = new GameImpl(); 
     BoardView view = new BoardView(this); 
     viewUpdater = new ServerViewUpdaterImpl(view); 

     Game gameStub = (Game) UnicastRemoteObject.exportObject(game, 1099); 
     ServerViewUpdater serverViewStub = (ServerViewUpdater) UnicastRemoteObject.exportObject(viewUpdater, 1099); 

     Registry registry = LocateRegistry.createRegistry(1099); 

     registry.rebind("TTTGame", gameStub); 
     registry.rebind("TTTServerView", serverViewStub); 


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

這裏的ControllerClient

public ControllerClient() { 
    try { 

     BoardView view = new BoardView(this); 
     localView = new ClientViewUpdaterImpl(view); 

     String address = JOptionPane.showInputDialog("Insert server's address: "); 

     Registry registry = LocateRegistry.getRegistry(address, 1099); 

     game = (Game) registry.lookup("TTTGame"); 
     remoteView = (ServerViewUpdater) registry.lookup("TTTServerView"); 
     remoteView.registerClientView(localView); 


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

} 

它本地工作,通過將 「localhost」 的 「127.0.0.1」 或我的外網IP。 如果客戶端和服務器在不同的機器上運行,它不起作用。

我得到的例外 「通過連接127.0.1.1拒絕」。我不明白他們爲什麼要在執行的某個時候使用本地主機地址。

+0

您是否正在查找得到的異常,或執行遠程方法時? – EJP

+0

查找。 實際上,它獲取localhost上的註冊表,而不是服務器地址上的註冊表。然後執行查找。由於它確實在本地主機上找到了任何註冊表(當然,註冊表在服務器上!),它會出現異常。 – user1384636

+0

這裏有什麼問題。如果你將本地主機的IP地址提供給'LocateRegistry.getRegistry()',它只會在本地主機上查找一個註冊表。如果您提供服務器的IP地址,它將查找服務器的註冊表。如果異常說「通過連接127.0.1.1拒絕」,那就是*初步證據*您所提供給127.0.1.1'LocateRegistry.getRegistry()'要麼你就在電話會議上未查找。 – EJP

回答

3

因爲對方說,這是海灘您的IP設置爲127.0.1.1

運行一個ipconfig -a,看看有什麼是你的主機的IP地址。

然後編輯/etc/hosts文件,而不是此行 127.0.1.1 "name of the host" 更換127.0.1.1與你的機器的IP。

這應該工作。

您可以隨時驗證IP的RMI服務器是聽,通過執行:

String hostname = InetAddress.getLocalHost().getHostAddress(); 
Log.info("this host IP is " + hostname); 

如果覆蓋了/etc/hosts文件正確的IP,那麼一切都應該工作。

1

這是因爲你的IP是最有可能是錯誤的。它是127.0.0.1而不是127.0.1.1。你也可以試試localhost

+0

你的意思是「你的IP很可能是錯的」? – user1384636

+0

它是127.0.1.1,它也是本地主機。 – user1384636

+0

@ user1384636但是您想要的註冊表不在本地主機中。它在服務器主機中。 – EJP

2

你有地址錯了,當你叫getRegistry()。您需要提供服務器主機的地址。在客戶端主機中通常沒有運行RMI註冊表。