gpt4 book ai didi

java - RM over SSL 与服务器上的单个端口

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:04 31 4
gpt4 key购买 nike

案例 1 - 没有 SSL
当我需要一个简单的 RMI 连接(没有 SSL)时,我在服务器上使用以下代码

Registry registry = LocateRegistry.createRegistry(2004,rmiClientSocketFactory,rmiServerSocketFactory);
stub=UnicastRemoteObject.exportObject(someObj, 2004, rmiClientSocketFactory,rmiServerSocketFactory);

请注意,我在创建注册表和导出对象时都使用了端口号。代码按预期工作 - 没有任何问题。

案例 2 - 使用 SSL
我使用与案例 1 相同的代码,只是两个工厂都是 SSL 工厂。结果 - 在服务器端,在端口 2004 上创建了一个套接字,但我的客户端无法连接到它 - 它抛出

java.rmi.ConnectIOException: non-JRMP server at remote endpoint
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:248)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at rmi.DateClient.perform(DateClient.java:48)
at rmi.DateClient.main(DateClient.java:38)
Exception occured: java.rmi.ConnectIOException: non-JRMP server at remote endpoint

为了让它工作,我需要修改我在服务器上的代码

Registry registry = LocateRegistry.createRegistry(2004);
stub = UnicastRemoteObject.exportObject(someObj, 0, rmiClientSocketFactory, rmiServerSocketFactory);

此代码有效,但在服务器端创建了两个套接字,一个在端口 2004 上,另一个在某个可变端口(例如 45329)上。但我不想有两个 socket 。如何解释和修复?

最佳答案

To make it work I need to modify my code on server to

Registry registry = LocateRegistry.createRegistry(2004);

没有。这是倒退的一步:您正在从注册表中删除 SSL。您需要修改您的客户端,以便在查找注册表时使用 SSL。这意味着您必须使用 Registry 类而不是 Naming:

Registry registry = LocateRegistry.getRegistry(host, 2004, rmiClientSocketFactory);
MyRemoteInterface mri = (MyRemoteInterface)registry.lookup(...);

在任何情况下,您都不能在同一个端口上同时拥有明文和 SSL 远程对象。

关于java - RM over SSL 与服务器上的单个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43615911/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com