2012-09-22 94 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注册表。