我在 CORBA 中有使用 IIOP 协议的应用程序,我正在使用 JDK 6 的 Java IDL 组件,这是另一个 ORB 实现。
用Java语言实现客户端和服务器。
JDK ORB 实现中是否有任何方法可以从服务器 (ORB) 代码中获取客户端 ORB 的主机和端口?
或者
有什么方法可以使用 IIOP 协议,让客户端获取主机和端口?
这是我们正在做的识别客户以跟踪谁被请求
我认为没有任何便携的方法可以做到这一点。也许有你特定的 ORB,我不知道。回想一下,CORBA 非常努力地向应用程序隐藏传输细节。应用程序甚至可能没有使用 IIOP,因此无论如何都无法获取 TCP 主机和端口信息。
您可能需要考虑向 IDL 添加额外的标识符参数,以便服务器可以识别客户端。您还可以考虑让客户端调用服务器上的“注册”函数,然后服务器分发一个标识符,所有客户端必须在后续调用中将其传递回服务器。
此标识符可以像字符串或整数一样简单,也可以像服务器必须使用公钥验证的某种安全令牌一样复杂。这一切都取决于您的应用程序的要求。
这取决于具体情况,但有时您需要从 IOR 中提取主机/端口以进行测试、日志记录和调试。IOR 包含主机和端口,您只需要从 IOR 表示的字节数组中对其进行解码。因此,只需以 GNU Classpath 中的 CORBA 规范和 IorParser.java(大量依赖项)为例,如果您在周末有时间,请自行解码 :)
如果你没有时间,可以使用 ORB 附带的命令行实用程序:
对我来说,答案#5 已经足够好了。我使用 Jacorb 作为基于 java 的测试工具。但话又说回来,PrintIOR 要求 org.jacorb.orb.ORB 由 org.omg.CORBA.ORB.init() 实例化。因此,如果您被迫在同一个 JVM 中使用 JDK ORB,这可能会很棘手。
这在使用 Java 和 Corba 的点对点文件共享中由识别客户端复制。并在 2 个客户端之间建立套接字套接字
有一个基于 JacORB 的解决方案。