C++ rtmp livestream 流媒体

海阔天空 张翼飞翔

我的学习笔记。--我喜欢这里,因为这里安静,无广告骚扰。
随笔 - 82, 文章 - 2, 评论 - 126, 引用 - 0
数据加载中……

使用VC++ 编写Zeroc ICE应用程序的例子

上篇写了C#如何使用ICE,这篇介绍如何在C++中使用ICE
因为VC++6.0使用ICE需要安装STLPort,麻烦。所以这里服务端和客户端都使用VS.NET 2005开发,语言采用VC++,

1,安装ice,这里安装在D:\Lib\Ice-3.3.0
2,编写DemoIce.ice文件

#ifndef DEMO_ICE
#define  DEMO_ICE
module Demo
{
    
interface  DemoIce
    
{
        idempotent 
void  SetEx( string  strMsg); //
        [ " cpp:const " ] idempotent  void  GetEx( out   string  strMsg);
    }
;
}
// end module
#endif


3.编译DemoIce.ice成DemoIce.cpp文件
 path D:\Lib\Ice-3.3.0\bin
 slice2cpp.exe  DemoIce.ice
成功后会生成DemoIce.h DemoIce.cpp二个文件

4,打开.net2005 新建--项目--其他语言--VC++--空项目  名称DemoS;
5,解决方案窗口库,右键--添加--现有项 把刚才生成的DemoIce.h DemoIce.cpp二个文件加到项目里
6,解决方案窗口库,右键--添加--新建项 添加一个C++文件  名称DemoS 代码如下

#include  < stdio.h >
#include 
< Ice / Ice.h >
#include 
< DemoIce.h >

using   namespace  Demo;
using   namespace  std;

#pragma comment(lib,
" Iced.lib " )
#pragma comment(lib,
" IceUtild.lib " )
// release 版本用Ice.lib IceUtil.lib

class  DemoIceI :  public  Demo::DemoIce
{
    
public  :
        
string  strMsg;
        
virtual   void  SetEx( const  ::std:: string &  param,  const  ::Ice::Current &  )
        
{
            strMsg 
=  param;            
            printf(param.c_str());
        }


        
virtual   void  GetEx(::std:: string &  param,  const  ::Ice::Current &  )  const  
        
{
            param 
=   " 1234\n " ;
        }

}
;


int  main()
{

   
int  status  =   0 ;
    Ice::CommunicatorPtr ic;
    
try  
    
{
        ic 
=  Ice::initialize();
        Ice::ObjectAdapterPtr adapter 
=  ic -> createObjectAdapterWithEndpoints( " DemoIceEndpoint " " default -p 10000 " );
        Demo::DemoIcePtr demoIcePtr 
=   new  DemoIceI();
        adapter
-> add(demoIcePtr, ic -> stringToIdentity( " DemoIce " ));
        adapter
-> activate();
        printf(
" server.start ok \n " );
        ic
-> waitForShutdown();
    }
  catch  ( const  Ice::Exception  &  ex)  {
        cerr 
<<  ex  <<  endl;
        status 
=   1 ;
    }
  catch  ( const   char   *  msg)  {
        cerr 
<<  msg  <<  endl;
        status 
=   1 ;
    }


    
if  (ic)
    
{
        ic
-> destroy();
    }

    
    
return  status;
}

7.工具--选项--项目和解决方案--VC++目录 在下拉框选择“包含文件” 添加D:\Lib\Ice-3.3.0\include,
8.继续添加包含文件,把DemoIce.h所在的目录也包含进去,我这里是E:\Workspace\VC++\Test\IceVC8\DemoIce
9.在下拉框选择“库文件” 添加 D:\Lib\Ice-3.3.0\lib
10.项目--属性--配置属性--c/c++--代码生成--运行时库--多线程调试 DLL ; 编译运行 如果没问题,服务端完成。
11,打开.net2005 新建--项目--其他语言--VC++--空项目  名称DemoC;
12.解决方案窗口库,右键--添加--新建项 添加一个C++文件  名称DemoC 代码如下:

#include  < stdio.h >
#include 
< DemoIce.h >
#include 
< Ice / Ice.h >

using   namespace  Demo;
using   namespace  std;

#pragma comment(lib,
" Iced.lib " )
#pragma comment(lib,
" IceUtild.lib " )
// release 版本用Ice.lib IceUtil.lib

int  main()
{
    
int  status  =   0 ;
    Ice::CommunicatorPtr ic;
    
try  
    
{
        ic 
=  Ice::initialize();        
        Ice::ObjectPrx 
base   =  ic -> stringToProxy( " DemoIce:default -h 127.0.0.1 -p 10000 " );
        DemoIcePrx twoway 
=  DemoIcePrx::checkedCast( base );
        twoway
-> SetEx( " abcd\n " );
        
string  strMsg;
        twoway
-> GetEx(strMsg);
        printf(strMsg.c_str());
    }
  catch  ( const  Ice::Exception  &  ex)  {
        cerr 
<<  ex  <<  endl;
        status 
=   1 ;
    }
  catch  ( const   char   *  msg)  {
        cerr 
<<  msg  <<  endl;
        status 
=   1 ;
    }

    printf(
" client.start ok \n " );
    getchar();
    
if  (ic)
    
{
        ic
-> destroy();
    }

    
    
return  status;
}


13.编译运行 如果没问题会得到服务器端的数据 1234




posted on 2010-04-13 20:56 ZhangEF 阅读(1266) 评论(0)  编辑  收藏 所属分类: 配置部署