Chinaunix首页 | 论坛 | 博客
  • 博客访问: 272004
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-20 14:44
文章分类

全部博文(124)

文章存档

2020年(1)

2018年(2)

2016年(2)

2015年(6)

2014年(10)

2013年(23)

2012年(7)

2011年(18)

2010年(15)

2009年(8)

2007年(8)

2006年(23)

2005年(1)

我的朋友

分类:

2011-05-09 10:41:58

1. 编写idl文件, 命名为Messenger.idl
interface Messenger
{
        boolean send_mssage(
in string user_name,
in string subject,
inout string message
);
};
2. 编译idl, 生成cpp文件!
tao_idl -GI Messenger.idl
此步会生成服务端, 客户端文件.

3. 修改 MessengerI.cpp,完成send_message的功能.在end_mssage函数体内添加:

cout<<"Message from:" << user_name <<endl;
cout<<"Subject: "<<subject<<endl;
cout<<"Message: "<<message<<endl;
CORBA::string_free(message);
message=CORBA::string_dup("THanks for the message.");
return true;

 
  由于使用了cout, 所以在该文件的开头需要使用
  #incude
  using namespace std;
4.编写服务器实现代码!
代码如下:

#include "MessengerI.h"
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
    try {
        // Initialize the ORB.

        CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

        //Get a reference to the RootPOA.

        CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
        PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);

        // Activate the POAManager.

        PortableServer::POAManager_var mgr = poa->the_POAManager();
        mgr->activate();

        // Register the servant with the RootPOA, obtain its object

        // reference, stringify it, and write it to a file.

        PortableServer::ObjectId_var oid = poa->activate_object(new Messenger_i());
        obj = poa->id_to_reference(oid.in());
        CORBA::String_var str = orb->object_to_string(obj.in());
        //这样客户端通过使用该ior文件,可以创建出接口对象,从而可以对该对象的远程调用!

        ofstream iorFile("Messenger.ior");
        iorFile << str.in() << std::endl;
        iorFile.close();
        std::cout << "IOR written to file Messenger.ior" << std::endl;
        // Accept requests from clients. 等待客户端消息.

        orb->run();
        orb->destroy();
        return 0;
    }
    catch (CORBA::Exception& ex) {
        std::cerr << "MessengerServer CORBA exception: " << ex << std::endl;
    }
    return 1;
}

5. 对服务端户端编译:
通过如下命令完成对服务端的编译:
CC -mt -g   -DSUN_CC_HAS_PVFC_BUG   -I/tool/eesd/ACE_wrappers -I/tool/eesd/ACE_wrappers/TAO  -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -o server  -L/tool/eesd/ACE_wrappers/lib  -lTAO_PortableServer -lTAO -lACE  -lsocket -ldl -lnsl -lgen -lposix4 -ladm  MessengerServer.cpp MessengerS.cpp MessengerC.cpp MessengerI.cpp
其中 -mt是供多线程使用的,可以使用-D_REENTRANT -lthread

6. 编写客户端代码:

#include "MessengerC.h"
#include <iostream>
int main(int argc, char* argv[])
{
    try {
        // Initialize the ORB.

        CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
        // Read and destringify the Messenger object's IOR.

        CORBA::Object_var obj = orb->string_to_object("file://Messenger.ior");
        if( CORBA::is_nil(obj.in())) {
            std::cerr << "Could not get Messenger IOR." << std::endl;
            return 1;
        }
        // Narrow the IOR to a Messenger object reference.

        Messenger_var messenger = Messenger::_narrow(obj.in());
        if( CORBA::is_nil(messenger.in())) {
            std::cerr << "IOR was not a Messenger object reference." << std::endl;
            return 1;
        }
        // Send a message the the Messenger object.

        CORBA::String_var msg = CORBA::string_dup("Hello!");
        messenger->send_mssage("TAO User", "Test", msg.inout());
        // Print the Messenger's reply.

        std::cout << "Reply: " << msg.in() << std::endl;
        return 0;
    }
    catch (CORBA::Exception& ex) {
        std::cerr << "MessengerClient CORBA exception: " << ex << std::endl;
    }
    return 1;
}


7. 编译客户端代码:
CC -mt -g   -DSUN_CC_HAS_PVFC_BUG   -I/tool/eesd/ACE_wrappers -I/tool/eesd/ACE_wrappers/TAO  -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -o client  -L/tool/eesd/ACE_wrappers/lib  -lTAO_PortableServer -lTAO -lACE  -lsocket -ldl -lnsl -lgen -lposix4 -ladm  MessengerClient.cpp MessengerC.cpp

8. 完成.
开启两个终端.
一个运行./server
IOR written to file Messenger.ior
Message from:TAO User
Subject:     Test
Message:     Hello!
另一个运行./client
Reply: THanks for the message.

9. makefile 文件如下:

LIB=-lTAO_PortableServer -lTAO -lACE -lsocket -ldl -lnsl -lgen -lposix4 -ladm
LIB_PATH=-L/tool/eesd/ACE_wrappers/lib
MACRO=-DSUN_CC_HAS_PVFC_BUG -DACE_HAS_EXCEPTIONS -D__ACE_INLINE_
INC=-I/tool/eesd/ACE_wrappers -I/tool/eesd/ACE_wrappers/TAO
flag=-mt -g
sobject=MessengerServer.o MessengerS.o MessengerC.o MessengerI.o
cobject=MessengerC.o MessengerClient.o
CXX=CC #隐含规则需要的编译器.
CPPFLAGS=$(INC) $(MACRO) $(flag) #隐含规则需要的flag.
server: $(sobject)
        CC $(LIB_PATH) $(LIB) $^ -o $@
client: $(cobject)
        CC $(LIB_PATH) $(LIB) $^ -o $@
clean:
        rm $(sobject) $(cobject)
        rm client
        rm server


阅读(1427) | 评论(0) | 转发(1) |
0

上一篇:ACE_TAO的编译

下一篇:TAO 示例解读

给主人留下些什么吧!~~