java.rmi.ConnectException:连接拒绝托管

时间:2011-04-07 05:36:50

标签: java

经过艰苦的努力,我使用apache作为http设置了Java RMI隧道 服务器。一切都很好,就像我办公室局域网的魅力一样。但是当我在客户所在地安装时,我得到了一些例外.RMI系统只能在他的服务器上运行。

当我尝试其他客户的电脑时,我得到以下内容。

你能帮助我解决这个问题吗?

 java.rmi.ConnectException: Connection refused to host: 172.xx.x.xxx;
 nested exception is:   java.net.ConnectException: Connection timed
 out: connect   at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown
 Source)    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown
 Source)    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown
 Source)    at sun.rmi.server.UnicastRef.invoke(Unknown Source)     at
 java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown
 Source)    at
 java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
    at $Proxy1.getUserID(Unknown Source)    at
 rmi.source.ServerImpl$JobScheduler.run(ServerImpl.java:265)    at
 java.util.TimerThread.mainLoop(Unknown Source)     at
 java.util.TimerThread.run(Unknown Source) Caused by:
 java.net.ConnectException: Connection timed out: connect   at
 java.net.PlainSocketImpl.socketConnect(Native Method)  at
 java.net.PlainSocketImpl.doConnect(Unknown Source)     at
 java.net.PlainSocketImpl.connectToAddress(Unknown Source)  at
 java.net.PlainSocketImpl.connect(Unknown Source)   at
 java.net.SocksSocketImpl.connect(Unknown Source)   at
 java.net.Socket.connect(Unknown Source)    at
 java.net.Socket.connect(Unknown Source)    at
 java.net.Socket.<init>(Unknown Source)     at
 java.net.Socket.<init>(Unknown Source)     at
 sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown
 Source)    at
 sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown
 Source)    ... 10 more

3 个答案:

答案 0 :(得分:2)

我正在运行来自roseindia rmi的文件 rmicregistry有错误,必须使用rmiregistry

我将ip更改为localhost,如何在特殊端口号上运行我不知道这一刻 一个人必须使用rmiregistry 不是rmicregistry

所以: 移动到您的类文件所在的文件夹。 输入:rmiregistry 然后打开2个新的命令提示移动到类所在的同一个文件夹,并使用一个来运行服务器,另一个运行到客户端。

答案 1 :(得分:1)

RMI服务器有一个讨厌的习惯,即将新端口号传递给客户端以处理与特定Remote对象的客户端通信。如果此端口号被防火墙阻止,您将得到类似的异常。 确保使用相同的端口号注册所有远程对象。然后,RMI将为您复用客户端呼叫。

答案 2 :(得分:0)

经过我的研究,解决方案是: System.setProperty("java.rmi.server.hostname", IP); 在服务器端注册服务之前。以下是一个例子,希望它可以帮到你!

public static void main(String[] args) throws MalformedURLException, RemoteException, AlreadyBoundException {
        RmiServer server=new RmiServer();
        System.setProperty("java.rmi.server.hostname", 指定IP);
        LocateRegistry.createRegistry(8808);  
        Naming.rebind("//10.10.116.74:8808/SAMPLE-SERVER", server);  
    }