【问题标题】:Corba remote accessCorba 远程访问
【发布时间】:2012-11-23 04:43:37
【问题描述】:

我有一个 Corba 服务器在系统中运行,我想从同一 LAN 上的另一台机器访问它。我尝试提供服务器机器的服务器 ip 以访问(附加代码);但是我收到下面提到的错误:

orbd -ORBInitialPort 1050 -ORBInitialHost <serverip>&

java HelloServer -ORBInitialPort 1050 -ORBInitialHost <serverip>&

java HelloClient -ORBInitialPort 1050 -ORBInitialHost <serverip>&

WARNING: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: 127.0.1.1; port: 43944"
org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 201  completed: No
  • 它说主机名是 127.0.1.1,但这不是我指定的服务器名。
  • 端口号与我指定的格式不同
  • 服务器尚未收到任何连接,仍在等待。

有人可以帮帮我吗?

【问题讨论】:

  • 上面哪个应用程序会抛出异常?客户端还是服务器?
  • 你能告诉我们HelloClientHelloServer的代码吗?

标签: java corba idl


【解决方案1】:

CORBA 程序不直接处理服务器的 IP 地址。当您想要访问某个对象时,您需要它的 IOR - 或可互换的对象引用。 IOR 包含需要就对象联系的机器的地址、一些对象 ID 和一些更多的管理信息。

获取某个对象的 IOR 有两种最常用的方法。低级方法是服务器转换为字符串,并将该字符串写入某个文件。客户端读取该字符串并将其转换为对象引用。

其他方法是运行名称服务,该服务负责将名称转换为 IOR。类似于对象的 DNS。

典型的 CORBA 程序只会对一个或几个“根”对象进行这种操作,并且其他对象的对象引用作为调用该根对象的返回值返回。

【讨论】:

  • 这都是真的,但我认为这无关紧要。地址和端口被提供给程序,以便它们可以连接到 ORB。这是必要的,因此程序可以连接到命名服务等,然后它们可以从中检索由 IOR 标识的对象,如您所描述的。所以,程序确实需要 ORB 服务器的地址和端口。
  • 除非他们没有连接到命名服务而是直接连接到字符串化 IOR,或者程序需要命名服务的字符串化 IOR 而不是它的 IP。我假设对于非常简单的 hello world 命名服务根本不涉及,而是字符串化 IOR
  • 上面的例子使用了 java 的内置命名服务,由守护进程 ordb 进程提供
  • 服务器的 IP 地址和端口实际上进入了 IOR,所以是的,它们是必需的。通常,您指定希望服务器在其 IOR 中作为服务器应用程序的命令行参数通告的 IP 地址和端口号。
【解决方案2】:

谢谢大家。我已经更改了 /etc/hosts conf 文件。更改了 localhost ip,以及我如何能够访问远程服务器。

【讨论】:

    【解决方案3】:

    在您需要的每个服务器和客户端的代码的参数端

    -ORBInitialPort 1050 -ORBInitialHost serverIP
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2013-08-09
      • 2011-09-04
      • 2018-07-23
      • 2021-12-12
      • 2011-08-13
      • 2019-04-04
      相关资源
      最近更新 更多