C++ CORBA编程

C++语言 码拜 9年前 (2016-06-07) 1954次浏览
使用VC6.0编辑器运行下面程序输出异常:
omniORB: From endpoint: giop:tcp:127.0.0.1:3881. Detected GIOP 1.2 protocol erro
r in input message. giopImpl12.cc:289. Connection is closed.
Client.main() Exception  COMM_FAILURE
IDL接口:
//银行账户管理系统的对象接口定义
module Bank
{
interface Account
{
void deposit(in float amount);
boolean withdraw(in float amount);
float getBalance();
};
//账户管理
interface AccountManager
{
Account open(in string name);
};
};======================================================
//账户管理
interface AccountManager
{
Account open(in string name);
};
};
客户端:
#include<iostream.h>
#include”Bank.h”
#include<fstream>
int main(int argc, char** argv)
{
try
{
//if(argc != 2)
//throw 0;
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
argv[1] = “IOR:010000001c00000049444c3a42616e6b2f4163636f756e744d616e616765723a312e3000010000000000000064000000010102000b00000031332e312e392e3137380000040a00000e000000feb143e35300003c5c000000000000000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100”;
CORBA::Object_var obj = orb->string_to_object(argv[1]);
if(CORBA::is_nil(obj))
{
cerr<<“11111111111111111″<<endl;
throw 0;
}
//Bank::Account lrt_account;
Bank::AccountManager lrt_accountmgr;
Bank::AccountManager_var account = lrt_accountmgr._narrow(obj);
if(CORBA::is_nil(account))
{
cerr<<“222222222222222222″<<endl;
throw 0;
}
//cout<<account->open(lrq)<<endl;
char str[10];
memset(str, 0x00, sizeof(str));
strcpy(str, “lrq”);
account->open(str);
}
catch (const CORBA::Exception& e)
{
cerr << “Client.main() Exception  ” << e._name() << endl;
return 1;
}
return 0;
}
==================================================================
服务器:
#include<iostream>
#include”Bank.h”
#include”Imp.h”
#include<fstream>
using namespace std;
int main(int argc, char **argv)
{
ofstream f1(“D:\ior.txt”);
if(!f1)
return 1;
try
{
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
CORBA::Object_var obj = orb->resolve_initial_references(“RootPOA”);
PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj);
//Activate POA manager
PortableServer::POAManager_var mgr = root_poa->the_POAManager();

mgr->activate();
//Account_Impl
AccountManagerImpl managerServant;
//managerServant = new AccountManagerImpl();
//myPOA.activate_object_with_id(“BankManager”, getBytes(), managerServant);
CORBA::String_var str = orb->object_to_string(managerServant._this());
cout<<“账户管理员BankManager就绪……”<<endl;
printf(“%s\n”,str);
for(int j=0; j<strlen(str); j++)
{
cout<<*(str+j);
f1<<*(str+j);
}
f1.close();
cout<<endl;

orb->run();
}
catch (const CORBA::Exception&)
{
cerr << “exception” << endl;
return 1;
}
return 0;
}

解决方案

20

Detected GIOP 1.2 protocol error in input message.
在输入消息检测到GIOP 1.2 协议错误

20

CORBA有多种实现,例如基于ACE的TAO
你用的是哪个啊?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ CORBA编程
喜欢 (0)
[1034331897@qq.com]
分享 (0)