Java RMI:连接拒绝承载-编辑/etc/hosts和setProperty()不工作

Java RMI:连接拒绝承载-编辑/etc/hosts和setProperty()不工作,java,macos,rmi,hosts,Java,Macos,Rmi,Hosts,我知道以前有人问过这个问题,但到目前为止我找到的答案没有帮助。我试图通过添加行来编辑我的/etc/hosts文件 127.0.0.1 java.rmi.server.hostname 接下来,我尝试添加 System.setProperty("java.rmi.server.hostname","127.0.0.1"); 到我的代码(也尝试使用我的“外部”IP地址)。然而,我不断地发现这个错误: java.rmi.ConnectException: Connection refused

我知道以前有人问过这个问题,但到目前为止我找到的答案没有帮助。我试图通过添加行来编辑我的/etc/hosts文件

127.0.0.1    java.rmi.server.hostname
接下来,我尝试添加

System.setProperty("java.rmi.server.hostname","127.0.0.1");
到我的代码(也尝试使用我的“外部”IP地址)。然而,我不断地发现这个错误:

java.rmi.ConnectException: Connection refused to host: 192.168.178.22; nested exception is: 
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at java.rmi.Naming.rebind(Naming.java:177)
以下是我的服务器代码:

public class CounterServer {
    public static void main(String args[]) {
        try {
            System.setProperty("java.rmi.server.hostname","192.168.178.22");

            LocateRegistry.createRegistry(4711);

            ICounter counter = new Counter();
            Naming.rebind("Counter", counter);
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}
你知道我怎样才能把它修好吗?我正在Mac OSX上运行

天哪,太蠢了:-)这个问题与setProperty()或my/etc/hosts无关。当您从代码启动RMI注册表时,请确保在该注册表上而不是在命名时调用rebind。这是正确的代码,一切运行起来都很有魅力

public class CounterServer {
    public static void main(String args[]) {
        try {    
            Registry r = LocateRegistry.createRegistry(4711);

            ICounter counter = new Counter();
            r.rebind("Counter", counter);
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

或者至少在
Naming.rebind()
中使用与创建注册表时相同的端口。您需要将
注册表
变量设置为静态,以防止所有变量都被垃圾收集。