andylin02 发表于 2013-1-29 23:22:28

Win32 RPC 编程(二)

 
Win32 RPC 编程(二) 示例下载

<div class="postbody">这部分基本和上一节一样,不过上一节中 RPC 是通过 Named Pipe 调用的,这里我们再试一下 TCP 的方式。
代码大部分都是相同的, IDL 接口不用变(无论是通过什么方式 RPC,接口都是与之无关的)。

服务端要换成 TCP 的方式:
int main(int argc,char * argv[]){   // 用TCP 方式作为RPC 的通道。绑定端口13521。   RpcServerUseProtseqEp(         (unsigned char *)"ncacn_ip_tcp",          RPC_C_PROTSEQ_MAX_REQS_DEFAULT,          (unsigned char *)"13521",          NULL);         // 注意:从Windows XP SP2 开始,增强了安全性的要求,如果用 RpcServerRegisterIf() 注册   // 接口,客户端调用时会出现 RpcExceptionCode() == 5,即Access Denied 的错误. 因此,必   // 须用 RpcServerRegisterIfEx 带 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 标志允许客户端直   // 接调用。   // RpcServerRegisterIf(HelloWorld_v1_0_s_ifspec, NULL, NULL);   RpcServerRegisterIfEx(         HelloWorld_v1_0_s_ifspec, // Interface to register.         NULL,         NULL, // Use the MIDL generated entry-point vector.         RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH,         0,         NULL);       // 后面都相同       ...   return 0;} 
 
客户端的调用方式也要换:
int main(int argc, char * argv[]){   // 前面都相同   ...         // 用 TCP 方式作为 RPC 的通道。服务器端口 13521。第3个   // 参数 NetworkAddr 如果取 NULL,那么就是连接本机服务,   // 也可以取IP, 域名, servername 等   RpcStringBindingCompose(          NULL,          (unsigned char*)"ncacn_ip_tcp",          (unsigned char*)"localhost" /*NULL*/,          (unsigned char*)"13521",          NULL,          &pszStringBinding      );         // 后面都相同   ... } 

别的地方都是一样的。

示例下载
页: [1]
查看完整版本: Win32 RPC 编程(二)