關於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調試過程中發現的一些網絡問題,希望本文給您在相應產品開發過程中帶來幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章