【问题标题】:rmi - ConnectExceptionrmi - 连接异常
【发布时间】:2012-12-24 09:33:31
【问题描述】:

这是我第一次使用 RMI,基本上我设法在我的 PC 上本地运行以下 RMI 示例,而不是通过两台单独的 Linux 机器。

服务器接口:

public interface PowerService extends Remote{
public BigInteger square ( int number )
    throws RemoteException;

public BigInteger power  ( int num1, int num2) 
    throws RemoteException;
}

服务器:

public class PowerServiceServer extends UnicastRemoteObject implements
    PowerService {

public PowerServiceServer() throws RemoteException {
    super();
}

public BigInteger square(int number) throws RemoteException {
    imp .....
    return (bi);
}

public BigInteger power(int num1, int num2) throws RemoteException {
    imp .....
    return bi;
}

public static void main(String[] args) throws Exception {

    PowerServiceServer svr = new PowerServiceServer();
    // ... and bind it with the RMI Registry
    Naming.bind("PowerService", svr);
    System.out.println("Service bound....");
}
}

客户:

public class PowerServiceClient {
public static void main(String args[]) throws Exception {
    // Call registry for PowerService
    PowerService service = (PowerService) Naming.lookup("rmi://" + args[0]
            + "/PowerService");
    DataInputStream din = new DataInputStream(System.in);
    for (;;) {
        System.out.println("1 - Calculate square");
        System.out.println("2 - Calculate power");
        System.out.println("3 - Exit");
        System.out.println();
        System.out.print("Choice : ");

        String line = din.readLine();
        Integer choice = new Integer(line);

        int value = choice.intValue();

        switch (value) {
        case 1:
            // Call remote method
            ....................
            break;
        case 2:
            // Call remote method
            ....................
            break;
        case 3:
            System.exit(0);
        default:
            System.out.println("Invalid option");
            break;
        }
    }
}

客户端界面和服务器一样

这是我为了运行 rmi 示例所做的:

1) 在服务器端我创建了存根

2) 运行 rmiregisrty

3) 运行服务器

4) 我将存根从服务器端复制到客户端到同一个包中

5) 运行客户端

运行客户端后,我收到以下错误消息:

线程“主”java.rmi.ConnectException 中的异常:连接拒绝主机:127.0.0.1;嵌套异常是: java.net.ConnectException:连接被拒绝 在 sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601) 在 sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198) 在 sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184) 在 sun.rmi.server.UnicastRef.invoke(UnicastRef.java:110) 在 compute.PowerServiceServer_Stub.square(未知来源)

可能是由于某些防火墙我无法连接,或者我做错了什么??

谢谢

【问题讨论】:

  • 127.0.0.1 是您希望连接的 IP 地址吗?换句话说,客户端是否与服务器运行在同一台主机上?注意你的远程方法 implementations 不必声明为 throwing RemoteException 除非编译器坚持,这只有在他们调用自己的远程方法时才会发生,这很不常见。
  • no ip 127.0.0.1 不是我期望看到的,因为客户端在另一台机器 (ip) 上

标签: rmi


【解决方案1】:

这是java.rmi.server.hostname. 解决的问题,请参阅 RMI 常见问题解答中的 A.1 项。在导出任何远程对象之前,您需要修复导致它的 /etc/hosts 错误配置,或者将服务器 JVM 中的系统属性 java.rmi.server.hostname 设置为服务器的正确 IP 地址。

【讨论】:

  • 如何将服务器JVM中的系统属性java.rmi.server.hostname设置为服务器正确的IP地址??
  • @mannedear 通过为此目的提供和记录的任何方法。
猜你喜欢
  • 2012-01-19
  • 2014-11-15
  • 2010-10-11
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多