4

我是 Java RMI 技术的新手。我有一个其他程序员已经遇到的问题,但我无法理解他们在教程中做了什么来解决它。我已经用 Java RMI 实现了游戏“tic tac toe”。这里是ControllerServer代码

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 拒绝”。我不明白他们为什么在执行的某个时候尝试使用本地主机地址。

4

3 回答 3

3

正如另一个人所说,这是海滩,您的 IP 设置为127.0.1.1

运行 aipconfig -a以查看您的主机的 IP 地址是什么。

然后编辑该/etc/hosts文件,而不是这一行 ,用你机器的 IP127.0.1.1 "name of the host" 替换127.0.1.1

这应该有效。

您始终可以通过执行以下命令来验证rmi 服务器正在侦听的 IP:

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

如果您/etc/hosts使用正确的 IP 覆盖文件,那么一切都应该正常工作。

于 2014-06-24T13:14:16.943 回答
2

调用 getRegistry() 时地址错误。您需要提供服务器主机的地址。客户端主机中通常没有运行 RMI 注册表。

于 2012-09-23T12:16:07.330 回答
1

这是因为您的 IP 很可能是错误的。它是127.0.0.1和不是127.0.1.1。你也可以试试localhost

于 2012-09-22T12:37:47.620 回答