关于ORBACUS产品网络通讯函数出现的问题

       在我们开发CORBA产品过程中,常常碰到网络链路无法链接问题。排除防火墙的干扰和相应的端口打开(10003),并且使用TCP/IP工具测试时,网络情况都是好的。因为CORBA中间件过程比较复杂,很多开发人员碰到一些疑难问题,失去了深入探讨问题根源的信心。       

        当一个优秀的产品开发过程,考虑的复杂环境程度局限于理想情况,不因为出现一些问题而我们就全盘否定。正如微软的操作系统在不断地升级和优化,常常发布很多补丁包,这也充分地说明它仍旧存在一些问题。

         如果您使用ORBACUS产品开发,可能存在下列出现的问题。

1、解决工作组和域名之间的问题

        

         当工作组与域计算机实现CORAB中间件,可能出现CORBA中间件无法通信。

         在工作组的计算机C:\Windows\System32\drivers\etc(注意不同的WINDOWS操作系统系统文件)文件夹下修改hosts文件:

         …

         …

         192.168.1.200   PC-2 #增加域名与IP地址映射

2、解决多块网卡地址绑定问题

       

       PC-1运行CORBA程序时,orbacus产品的IIOP协议中的profile_host会优先绑定到10.7.126.7第一块网卡地址。10.7.126.7是对外的一个网卡,按道理应该是10.110.42.3。这是ORBACUS产品本身有点问题,现做如下修改:

         1orbacus4.1.2产品修改:

         AORBinit.cpp行数:861,增加如下语句

      else if(strcmp(key, "ooc.orb.canonical.localhost") == 0)

        {

                 // Ignore -- handled in GetCanonicalHostname

        }

         Bnet.cpp函数char* OB::GetCanonicalHostname(bool numeric):行数:415

         增加如下语句

OB::Properties_var properties = OB::Properties::getDefaultProperties();

const char *canonicalhost = properties -> getProperty("ooc.orb.canonical.localhost");

if (canonicalhost)

{

    int i = 0;

    while (ent->h_addr_list[i] != NULL)

    {

        struct in_addr in;

        in.s_addr = *((u_long *)(&ent->h_addr_list[i][0]));

        char *localhost = string_dup(inet_ntoa(in));

        if (strcmp(localhost, canonicalhost) == 0)

        {

            host = string_dup(localhost);

            break;

        }

        i++;

    }

}

        C、当发生此情形需要在orbacus.cfg增加语句过滤:

         # 防止主机有多块网卡时,默认指定的第一块网络无效.

    ooc.orb.canonical.localhost=10.110.42.3

         2orbacus4.3.4产品修改:

         AORBinit.cpp行数:946,增加如下语句

      else if(strcmp(key, "ooc.orb.canonical.localhost") == 0)

        {

                 // Ignore -- handled in GetHostString

        }

         Bnet.cpp函数char*

         OB::GetHostString(bool numeric, bool preferIPv6)

throw(CORBA::COMM_FAILURE, CORBA::NO_MEMORY)

行数:1515,增加如下语句          

OB::Properties_var properties = OB::Properties::getDefaultProperties();
const char *canonicalhost = properties -> getProperty("ooc.orb.canonical.localhost");
if (canonicalhost)
{
    for (;;)

    {

        char *localhost = GetIPString((*it) -> ai_addr, (*it) -> ai_addrlen);

        if (strcmp(localhost, canonicalhost) == 0)

        {

            host = CORBA::string_dup(localhost);

            break;

        }

        if (*(++it) == 0)

        {

            break;

        }

    }

}

        C、当发生此情形需要在orbacus.cfg增加语句过滤:

         # 防止主机有多块网卡时,默认指定的第一块网络无效.

    ooc.orb.canonical.localhost=10.110.42.3

3、结束语

         以上情形是orbacus调试过程中发现的一些网络问题,希望本文给您在相应产品开发过程中带来帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值