问题描述
在使用 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\Heavenly\workspace\RMIServerSide\src
-
编译类
javac chapter40/*.java
-
启动 RMI 注册表
start rmiregistry
-
启动包含 main() 方法的注册服务器类。注意代码行略有不同
start java -cp . chapter40.AdditionServer
(服务器现已设置)
运行客户端程序
-
更改目录到源文件夹
cd c:\Users\Heavenly\workspace\RMIClientSide\src
-
编译所有类
javac chapter40/*.java
3.运行客户端程序
java chapter40.AdditionClient
(现在一切都在运行)