3

我在 CORBA 中有使用 IIOP 协议的应用程序,我正在使用 JDK 6 的 Java IDL 组件,这是另一个 ORB 实现。

用Java语言实现客户端和服务器。

JDK ORB 实现中是否有任何方法可以从服务器 (ORB) 代码中获取客户端 ORB 的主机和端口?

或者

有什么方法可以使用 IIOP 协议,让客户端获取主机和端口?

这是我们正在做的识别客户以跟踪谁被请求

4

3 回答 3

2

我认为没有任何便携的方法可以做到这一点。也许有你特定的 ORB,我不知道。回想一下,CORBA 非常努力地向应用程序隐藏传输细节。应用程序甚至可能没有使用 IIOP,因此无论如何都无法获取 TCP 主机和端口信息。

您可能需要考虑向 IDL 添加额外的标识符参数,以便服务器可以识别客户端。您还可以考虑让客户端调用服务器上的“注册”函数,然后服务器分发一个标识符,所有客户端必须在后续调用中将其传递回服务器。

此标识符可以像字符串或整数一样简单,也可以像服务器必须使用公钥验证的某种安全令牌一样复杂。这一切都取决于您的应用程序的要求。

于 2013-01-23T20:58:47.733 回答
1

这取决于具体情况,但有时您需要从 IOR 中提取主机/端口以进行测试、日志记录和调试。IOR 包含主机和端口,您只需要从 IOR 表示的字节数组中对其进行解码。因此,只需以 GNU Classpath 中的 CORBA 规范和 IorParser.java(大量依赖项)为例,如果您在周末有时间,请自行解码 :)

如果你没有时间,可以使用 ORB 附带的命令行实用程序:

  1. TAO/ACE ORB 中的 tao_catio
  2. Orbix/Orbacus ORB 中的 iordump
  3. 使用网络在线工具http://www2.parc.com/istl/projects/ILU/parseIOR/解析 IOR
  4. 还没有找到使用 JDK CORBA 进行解析的可能性。虽然代码肯定在内部 sun 包中的某个地方。
  5. Jacorb ORB中的dior。或者 java jacorb.Orb.util.PrintIOR -i [IOR-string]

对我来说,答案#5 已经足够好了。我使用 Jacorb 作为基于 java 的测试工具。但话又说回来,PrintIOR 要求 org.jacorb.orb.ORB 由 org.omg.CORBA.ORB.init() 实例化。因此,如果您被迫在同一个 JVM 中使用 JDK ORB,这可能会很棘手。

于 2014-04-25T15:37:31.027 回答
0

这在使用 Java 和 Corba 的点对点文件共享中由识别客户端复制。并在 2 个客户端之间建立套接字套接字

有一个基于 JacORB 的解决方案。

于 2019-11-25T14:52:02.577 回答