簡體   English   中英

使用 CMD 的 java RMI 的端口已在使用中的異常

[英]Port already in use exception with java RMI using CMD

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

服務器注冊表 class

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() 方法的注冊表服務器 class。 注意代碼行略有不同

start java -cp. chapter40.AdditionServer start java -cp. chapter40.AdditionServer (服務器已經設置好了)

運行客戶端程序

  1. 將目錄更改為源文件夾cd c:\Users\Heavenly\workspace\RMIClientSide\src

  2. 編譯所有類javac chapter40/*.java

3.運行客戶端程序java chapter40.AdditionClient (現在一切都在運行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM