我在新的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