rpc实验-陈泽斌网工113

rpc实验-陈泽斌网工113

ID:34418410

大小:36.50 KB

页数:7页

时间:2019-03-06

rpc实验-陈泽斌网工113_第1页
rpc实验-陈泽斌网工113_第2页
rpc实验-陈泽斌网工113_第3页
rpc实验-陈泽斌网工113_第4页
rpc实验-陈泽斌网工113_第5页
资源描述:

《rpc实验-陈泽斌网工113》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、陈泽斌1106100190网工113我们从一个简单的RPC“Hello,world!”的例子开始。参考资料:MSDN:Win32andCOMDevelopment->Networking->NetworkProtocols->RemoteProcedureCalls(RPC)第1步:编写IDL(InterfaceDescriptionLanguage,接口描述语言)文件--------------------------------------------------------------------------------IDL是一个通用的工业标准语言,大家应该不陌生,因为COM里

2、面也是用它来描述接口的。Hello.idl:[    uuid("4556509F-618A-46CF-AB3D-ED736ED66477"),  //唯一的UUID,用GUIDGen生成    version(1.0)] interfaceHelloWorld  {    //我们定义的方法    voidHello([in,string]constchar*psz);    voidShutdown(void);  }一个可选的文件是应用程序配置文件(.acf),它的作用是对RPC接口进行配置,例如下面的Hello.acf文件:Hello.acf:[      implicit_h

3、andle(handle_t   HelloWorld_Binding)  ] interfaceHelloWorld{}上面定义了implicit_handle,这样客户端将绑定句柄HelloWorld_Binding了,后面的客户端代码中我们会看到。编译IDL文件:>midlHello.idlMicrosoft(R)32b/64bMIDLCompilerVersion6.00.0366Copyright(c)MicrosoftCorporation1991-2002.Allrightsreserved.Processing.Hello.idlHello.idlProcessing

4、.Hello.acfHello.acf 我们可以看到自动生成了Hello.h,Hello_s.c,Hello_c.c文件,这些叫做rpcstub程序,不过我们可以不管这个概念,我们只需要知道Hello.h里面定义了一个externRPC_IF_HANDLEHelloWorld_v1_0_s_ifspec;这个RPC_IF_HANDLE将在后面用到。 第2步:编写服务端程序--------------------------------------------------------------------------------第1步中我们已经约定了调用的接口,那么现在我们开始实现其

5、服务端。代码如下:server.c#include#include#include"Hello.h"    //引用MIDL生成的头文件/** *这是我们在IDL中定义的接口方法 *需要注意一点,IDL里面的声明是:voidHello([in,string]constchar*psz); *但是这里变成了constunsignedchar*,为什么呢? *参见MSDN中的MIDLCommand-LineReference->/charSwitch *默认的编译选项,对IDL中的char按照unsignedchar处理 */voidHello(con

6、stunsignedchar*psz){    printf("%s",psz);} /**这也是我们在IDL中定义的接口方法,提供关闭server的机制*/voidShutdown(void){    //下面的操作将导致RpcServerListen()退出    RpcMgmtStopServerListening(NULL);    RpcServerUnregisterIf(NULL,NULL,FALSE);}intmain(intargc,char*argv[]){    //用NamedPipe作为RPC的通道,这样EndPoint参数就是NamedPipe的名字  

7、  //按照NamedPipe的命名规范,pipepipename,其中pipename可以是除了     //之外的任意字符,那么这里用一个GUID串来命名,可以保证不会重复    RpcServerUseProtseqEp((unsignedchar*)"ncacn_np",20,(unsignedchar*)"\pipe\{8dd50205-3108-498f-96e8-dbc4ec074cf9}",NULL);       /

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。