端口已在使用异常,java RMI使用CMD

端口已在使用异常,java RMI使用CMD,java,exception,cmd,rmi,Java,Exception,Cmd,Rmi,在使用java和CMD运行RMI时。将显示java.rmi.server.ExportException。例外情况是,端口已在使用中 服务器接口 import java.rmi.*; public interface AdditionInterface extends Remote { public int add(int a, int b) throws RemoteException; } 接口实现 import java.rmi.Naming; import java.

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

服务器接口


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);
        }
    }
}

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

我搜索了不同的线程,最终以一种不同于[但也是我所看到的组合]的方式实现了这一点

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

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

  • 编译类
    javac第40章/*.java

  • 启动RMI注册表
    启动注册表

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

  • 启动java-cp。第40章.附加服务器
    (服务器现在已设置)

    运行客户端程序

  • 将目录更改为源文件夹
    cd c:\Users\singhously\workspace\rmclientside\src

  • 编译所有类
    javac第40章/*.java

  • 3.运行客户端程序
    java chapter40.AdditionClient

    (所有内容现在都在运行)

    您可能已经有一个程序实例在运行,但您忘记了停止。您可能有一个以前的实例仍在运行。此处没有任何内容会导致此错误。你做了什么?可能是
    加法的构造函数
    ,但您还没有显示它。这里没有解决所述问题的方法。请注意,代码行[您指的是命令行]与什么略有不同?我遇到了问题,这个过程解决了它。我不知道你在说什么