我在新的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拒絕」。我不明白他們爲什麼要在執行的某個時候使用本地主機地址。
您是否正在查找得到的異常,或執行遠程方法時? – EJP
查找。 實際上,它獲取localhost上的註冊表,而不是服務器地址上的註冊表。然後執行查找。由於它確實在本地主機上找到了任何註冊表(當然,註冊表在服務器上!),它會出現異常。 – user1384636
這裏有什麼問題。如果你將本地主機的IP地址提供給'LocateRegistry.getRegistry()',它只會在本地主機上查找一個註冊表。如果您提供服務器的IP地址,它將查找服務器的註冊表。如果異常說「通過連接127.0.1.1拒絕」,那就是*初步證據*您所提供給127.0.1.1'LocateRegistry.getRegistry()'要麼你就在電話會議上未查找。 – EJP