Java 在两台不同的机器上创建RMI应用程序时,客户端和服务器应该在哪里定义接口客户端或服务器端?

Java 在两台不同的机器上创建RMI应用程序时,客户端和服务器应该在哪里定义接口客户端或服务器端?,java,interface,rmi,Java,Interface,Rmi,我想用两台笔记本电脑编写一个RMI应用程序,它可以添加两个数字?我制作了一台笔记本电脑作为服务器,另一台笔记本电脑作为客户端。当我们想要定义从远程接口扩展而来的接口时,我应该在哪台机器上定义这个接口—客户端还是服务器端?请帮忙 我使用一台机器制作了一个RMI应用程序,它工作正常。我在同一个包中定义了接口,但当我在不同的机器上工作时,它不工作 public interface AdditionI extends Remote { public int add(int x ,int y) t

我想用两台笔记本电脑编写一个RMI应用程序,它可以添加两个数字?我制作了一台笔记本电脑作为服务器,另一台笔记本电脑作为客户端。当我们想要定义从远程接口扩展而来的接口时,我应该在哪台机器上定义这个接口—客户端还是服务器端?请帮忙

我使用一台机器制作了一个RMI应用程序,它工作正常。我在同一个包中定义了接口,但当我在不同的机器上工作时,它不工作

public interface AdditionI extends Remote {
    public int add(int x ,int y) throws RemoteException;
}

public class Server extends UnicastRemoteObject implements AdditionI {

   public Server() throws RemoteException {}

   @Override
   public int add(int x, int y) throws RemoteException {
       return x+y;
   }

   public static void main(String ar [])throws RemoteException {
       try
       {
           Registry reg = LocateRegistry.createRegistry(2177);
           reg.rebind("Add", new Server());
           System.out.println("Server is ready");
       }
       catch(Exception e)
       {
           System.out.println("Error "+ e);
       }
   }
}



public class Client {

    public static void main(String ar[])throws RemoteException {
        try {
            Registry reg = LocateRegistry.getRegistry("localhost",2177);
            AdditionI ad = (AdditionI)reg.lookup("Add");
            System.out.println("REsult:"+(ad.add(10, 5)));
        } catch (Exception e) {
            System.out.println("Error"+e);
        }
    }

}
当我在同一台机器上运行此代码时,它工作正常。方法add的结果会显示出来,但在不同的机器上,它会显示以下消息

java.rmi.ServerException:服务器线程中发生RemoteException;嵌套的异常是:java.rmi.UnmarshalException:error unmarshalling参数;嵌套异常为:java.lang.ClassNotFoundException:

我们应该在哪里定义客户端或服务器端接口

简单:两边都需要接口

客户机知道这个接口,基本上它只知道:有一些接口定义了客户机代码可以使用的行为和方法

服务器知道该接口并实现它

该接口是从概念上连接客户机和服务器的基础。他们都知道有一些接口附加。客户将需要它,以便

首先确定支持该接口的服务 当找到这样的服务时,客户机知道如何调用相应的add方法 另一方面,服务器使用接口将其实现注册为服务。。。然后客户可以打电话

因此,在源代码中基本上有三个不同的部分:

common:包含该AdditionI接口的 客户机:标识和以后使用该附加服务所需的附加代码 服务器:实现和注册服务的附加代码 注意:java.lang.ClassNotFoundException异常实际上是基本异常。它告诉您运行某些代码的JVM没有找到某些类


换句话说:你的类路径设置不知何故被破坏了。只要研究一下这个例外,你就可以找到关于这些基本事物的无穷无尽的文档,例如。最有可能的是,它归结为:确保一些.class文件在类路径中。。。在你需要的地方。第一部分已经告诉你需要去哪里上课

您是否尝试过将AdditionI接口单独编译为Jar,然后将所述Jar包含在服务器和客户端计算机上?都没有。使用共享包。澄清请求:您的问题是否已得到充分回答?如果是这样,请考虑一个答案。这样做有助于未来的读者确定问题是否得到解决,并对花时间回答你的人表示感谢。否则请提供反馈,以便人们可以进一步调整他们的答案。我在两台机器上定义了相同的界面,但它给了我一个例外,我在问题中提到过。我应该从接口创建一个jar文件并将其添加到两台机器上,还是需要在两台机器上都定义它?@ijazahmadkhpalwaak ClassNotFoundException说您没有在两台机器上定义相同的接口。