Java RMI-在同一台机器中工作,而不是在局域网中

Java RMI-在同一台机器中工作,而不是在局域网中,java,networking,rmi,lan,rmiregistry,Java,Networking,Rmi,Lan,Rmiregistry,我试图在一台服务器和两台客户机之间建立两种通信。当所有程序都在同一台机器上运行时,这种方法非常有效,但当我尝试使用LAN网络时,它就不起作用了。 我得到了一个错误: java.rmi.ConnectException: Connection refused to host: 192.168.1.24; nested exception is: java.net.ConnectException: Connection timed out: connect 以下是服务器代码: public c

我试图在一台服务器和两台客户机之间建立两种通信。当所有程序都在同一台机器上运行时,这种方法非常有效,但当我尝试使用LAN网络时,它就不起作用了。 我得到了一个错误:

java.rmi.ConnectException: Connection refused to host: 192.168.1.24; nested exception is: 
java.net.ConnectException: Connection timed out: connect
以下是服务器代码:

public class Server{
private Game partie; // The class Game extends UnicastRemoteObject and implements ServerInterface


public Server() throws RemoteException {
    System.setProperty("java.rmi.server.hostname", "192.168.1.24");
    partie = new Game();
    LocateRegistry.createRegistry(1099);
    try{
        Naming.rebind("Server", partie);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}
public static void main(String argv[]) throws RemoteException{
    new Server();
}
}
以下是客户端代码的构造函数:

public Client(String aName, String aServerAdress) throws RemoteException {
    super();
    name = aName;
    ServerAdress = aServerAdress; //  = "192.168.1.24"
    theRegistry = LocateRegistry.getRegistry(ServerAdress);

    try {
        serverInterface = (ServerInterface) theRegistry.lookup("Server");
    } catch (NotBoundException e1) {
        e1.printStackTrace();
    }



    try {
        theRegistry.bind(name, this); // For two-way communication
    } catch (AlreadyBoundException e) {
        e.printStackTrace();
    }


    serverInterface.registerClient(name);
}
其中registerClient(字符串名称)代码约为(在游戏类中):

所有防火墙都已禁用

我已经研究这个问题好几个小时了,但我仍然没有发现问题所在。如果你能帮我一点忙,我将不胜感激。
谢谢

将127.0.0.1(注册表绑定除外)的所有事件更改为您的LAN IP地址(您的情况为192.168.1.24)

127.0.0.1是一个地址:

“环回(Loopback)描述了电子信号的路由方式, 数字数据流,或来自其原始数据流的项目流 设施返回到源的接收端,无需故意 处理或修改。这主要是测试 传输或运输基础设施。” --来自维基百科


将127.0.0.1(注册表绑定除外)的所有事件更改为LAN IP地址(在您的情况下为192.168.1.24)

127.0.0.1是一个地址:

“环回(Loopback)描述了电子信号的路由方式, 数字数据流,或来自其原始数据流的项目流 设施返回到源的接收端,无需故意 处理或修改。这主要是测试 传输或运输基础设施。” --来自维基百科


局域网和局域网?如何区分它们?127.0.0.1和192.168.1.24不一定是同一台机器(就您的网络代码而言)。使引用保持一致。192.168.1.24我用于运行服务器应用程序的计算机的地址是本地网络和LAN吗?如何区分它们?127.0.0.1和192.168.1.24不一定是同一台机器(就您的网络代码而言)。使引用保持一致。192.168.1.24是我用来运行服务器应用程序的计算机的地址。谢谢,这很有效。但现在我有另一个错误:
java.rmi.ServerException:RemoteException发生在服务器线程中;嵌套异常为:java.rmi.AccessException:Registry.Registry.rebind不允许;origin/192.168.1.56是非本地主机
。源代码是客户端代码中的registry.bind(名称,this)。我可以在注册表(服务器上)上注册客户端吗?这样服务器就可以调用客户端的方法了。现在看来,您实际上应该使用环回进行注册表绑定。我也编辑了我的答案我在registerClient方法中添加了客户端注册表绑定,效果很好,谢谢你的帮助。没问题,如果你能接受我的答案,我将非常感激:)谢谢,这很有效。但现在我有另一个错误:
java.rmi.ServerException:RemoteException发生在服务器线程中;嵌套异常为:java.rmi.AccessException:Registry.Registry.rebind不允许;origin/192.168.1.56是非本地主机
。源代码是客户端代码中的registry.bind(名称,this)。我可以在注册表(服务器上)上注册客户端吗?这样服务器就可以调用客户端的方法了。现在看来,您实际上应该使用环回进行注册表绑定。我也编辑了我的答案我在registerClient方法中添加了客户端注册表绑定,效果很好,谢谢你的帮助。没问题,如果你能接受答案,我将非常感谢:)
cd_client = (ClientInterface) Naming.lookup("rmi://127.0.0.1/" + name);