Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行RMI-Java的困难_Java_Rmi - Fatal编程技术网

运行RMI-Java的困难

运行RMI-Java的困难,java,rmi,Java,Rmi,我有一个客户机,一个服务器客户机和另一个服务器。Server客户端在中间,用于客户端和Server Fink之间的不同操作。我的代码在本地主机上按预期工作 我的问题是,我必须将这两台服务器放在同一个目录中(用javac和rmic编译),然后启动rmiregistry。这样很好用。我想从这两个服务器的原始文件夹(仍然在本地主机上)运行它们中的每一个。我尝试了一些方法,但得到了通常的java.rmi.NotBoundException或其他异常 serverClient: serverClient

我有一个客户机,一个服务器客户机和另一个服务器。Server客户端在中间,用于客户端和Server Fink之间的不同操作。我的代码在本地主机上按预期工作

我的问题是,我必须将这两台服务器放在同一个目录中(用javac和rmic编译),然后启动rmiregistry。这样很好用。我想从这两个服务器的原始文件夹(仍然在本地主机上)运行它们中的每一个。我尝试了一些方法,但得到了通常的java.rmi.NotBoundException或其他异常

serverClient:

serverClient sC=new serverClient(cars);
Naming.rebind("//localhost/serviceOne", sC);

ServerFin:

ServerFin srv = new ServerFin (prodc);
Naming.rebind("//localhost/serviceTwo", srv);
我通常使用

String dest = "//localhost/serviceOne";
MyClass obj =(MyClass)Naming.lookup(dest);
与上述;首先,我编译ServerFin并启动它。然后,我使用javac、rmic进行编译,并将存根从ServerFin复制粘贴到serverClient的dir。当我启动serverClient时,问题出现了

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:  java.lang.ClassNotFoundException: xxximpl_stub
我尝试过很多东西,比如
Registry=LocateRegistry.createRegistry(1099)但这是没有希望的。它就是不起作用


我到底该如何告诉中间服务器客户端连接到已经运行的注册表(使用ServerFin服务),并将其服务存储在那里?

如果此代码导致NotBoundException,则您查找的主机错误。如果服务器在另一台主机上运行,则需要在查找URL中使用该主机名

但不在绑定URL中。这始终是“localhost”

如果你得到另一个例外,你总是可以考虑告诉我们它是什么。< /P> 编辑如果您得到的是
ClassNotFoundException
,则有三种情况

  • 您在导出远程对象时得到它。生成存根,或者在远程对象构造函数中调用
    super(0)
    而不是
    super()
    ,这样您就不需要存根了。如果远程对象未扩展
    UnicastRemoteObject
    ,出于同样的原因,请使用端口号为零的
    UnicastRemoteObject.exportObject()

  • 你在装订的时候拿到的。注册表的类路径上没有命名该类。修复该问题,或者从服务器JVM内部启动注册表,使用
    LocateRegistry.createRegistry(),
    注意将结果存储在静态变量中

  • 你抬头看的时候就知道了。客户端在其类路径上没有命名该类。您忘记将其包含在客户机JAR文件中,或者您做了一些无效的事情,例如将其复制到项目客户机部分的不同包中:它必须是相同的类、相同的包,最好是相同的目标代码


  • 老实说,我不太理解你的帖子。两台服务器都在我的电脑上运行,客户端也是。你的意思是我必须改变我的查找吗?类似这样的内容:
    .lookup(“serviceTwo”)
    查找(“serviceOne”)取决于当前客户的需求?我有点困惑。提前感谢:)如果所有内容都在本地主机上运行,则无法获取NotBoundException。那么你的问题是什么?我不知道更改URL中的主机名有什么不清楚的地方。它当然没有给出你在这里提到的结果。对不起,我再次运行它,它是另一个<代码>java.rmi.UnmarshalException:错误解组参数;嵌套异常是:java.lang.ClassNotFoundException
    我仍然无法获取它。其他任何人也无法获取它,除非您提供真正的异常。请将整个堆栈跟踪编辑到您的问题中。由于我的困惑,您是对的,我认为我不清楚。我改变了一点我的操作。现在有什么意义吗?我要求一个完整的堆栈跟踪。不是这样,给我。我们。这个完成堆栈Trace,不会发生的。我会自己解决这个问题。谢谢。如果你不打算提供完整的信息,你应该坦率地删除这个问题,它没有永久的意义。