使用 CMD 的 Java RMI 端口已被使用异常

问题描述

在使用 java 和 CMD 运行 RMI 时。显示 java.rmi.server.ExportException。例外情况是,端口已在使用中。

 I organised the Client and Server programs this way

服务器界面


import java.rmi.*;

public interface AdditionInterface extends Remote {
    public int add(int a,int b) throws remoteexception;
}

接口实现


import java.rmi.Naming; 
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class AdditionClient {
    public static void main(String[] args) {
        try {
            String host="";
            Registry registry = LocateRegistry.getRegistry(host);
            AdditionInterface hello = (AdditionInterface) registry.lookup("Addition");
            int result = hello.add(9,2);
            System.out.println("Result is: " + result);

        } catch (Exception ex) {
            System.out.println("HelloClient Exception" + ex);
        }
    }
}

服务器注册表类

package chapter40;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class AdditionServer {

    public static void main(String[] args) {

        try {
            Registry registry = LocateRegistry.getRegistry();
            AdditionInterface obj = new Addition();
            registry.rebind("Addition",obj);

            System.out.println("Addition Server is ready");
        } catch (Exception ex) {
            System.out.println("Addition Server Failed" + ex);
        }

    }

}

客户端程序


import java.rmi.Naming; 
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class AdditionClient {
    public static void main(String[] args) {
        try {
            String host="";
            Registry registry = LocateRegistry.getRegistry(host);
            AdditionInterface hello = (AdditionInterface) registry.lookup("Addition");
            int result = hello.add(9,2);
            System.out.println("Result is: " + result);

        } catch (Exception ex) {
            System.out.println("HelloClient Exception" + ex);
        }
    }
}

为了清楚起见,我在两个不同的项目中将服务器与客户端类分开

解决方法

我搜索了各种线程,最终得到了与 [ 不同的方法,但也与我所看到的相结合 ]

这样运行服务器程序(从命令提示符):

  1. 将目录更改为服务器的源文件夹 cd c:\Users\Heavenly\workspace\RMIServerSide\src

  2. 编译类 javac chapter40/*.java

  3. 启动 RMI 注册表 start rmiregistry

  4. 启动包含 main() 方法的注册服务器类。注意代码行略有不同

start java -cp . chapter40.AdditionServer (服务器现已设置)

运行客户端程序

  1. 更改目录到源文件夹 cd c:\Users\Heavenly\workspace\RMIClientSide\src

  2. 编译所有类 javac chapter40/*.java

3.运行客户端程序 java chapter40.AdditionClient (现在一切都在运行)