欢迎来到天天文库
浏览记录
ID:34418410
大小:36.50 KB
页数:7页
时间:2019-03-06
《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); /
此文档下载收益归作者所有