Win32 RPC 編程(二)

Win32 RPC 編程(二) 示例下載

這部分基本和上一節同樣,不過上一節中 RPC 是經過 Named Pipe 調用的,這裏咱們再試一下 TCP 的方式。
代碼大部分都是相同的, IDL 接口不用變(不管是經過什麼方式 RPC,接口都是與之無關的)。

服務端要換成 TCP 的方式:
Cpp代碼
  1. int main(int argc,char * argv[])   
  2. {   
  3.      // 用TCP 方式做爲RPC 的通道。綁定端口13521。   
  4.      RpcServerUseProtseqEp(   
  5.          (unsigned char *)"ncacn_ip_tcp",    
  6.          RPC_C_PROTSEQ_MAX_REQS_DEFAULT,    
  7.          (unsigned char *)"13521",    
  8.          NULL);       
  9.   
  10.      // 注意:從Windows XP SP2 開始,加強了安全性的要求,若是用 RpcServerRegisterIf() 註冊   
  11.      // 接口,客戶端調用時會出現 RpcExceptionCode() == 5,即Access Denied 的錯誤. 所以,必   
  12.      // 須用 RpcServerRegisterIfEx 帶 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 標誌容許客戶端直   
  13.      // 接調用。   
  14.   
  15.      // RpcServerRegisterIf(HelloWorld_v1_0_s_ifspec, NULL, NULL);   
  16.      RpcServerRegisterIfEx(   
  17.          HelloWorld_v1_0_s_ifspec, // Interface to register.   
  18.          NULL,   
  19.          NULL, // Use the MIDL generated entry-point vector.   
  20.          RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH,   
  21.          0,   
  22.          NULL);   
  23.   
  24.        // 後面都相同   
  25.        ...   
  26.   
  27.      return 0;   
  28. }  
 
 客戶端的調用方式也要換:
Cpp代碼
  1. int main(int argc, char * argv[])   
  2. {   
  3.      // 前面都相同   
  4.      ...   
  5.        
  6.      // 用 TCP 方式做爲 RPC 的通道。服務器端口 13521。第3個   
  7.      // 參數 NetworkAddr 若是取 NULL,那麼就是鏈接本機服務,   
  8.      // 也能夠取IP, 域名, servername 等   
  9.      RpcStringBindingCompose(    
  10.          NULL,    
  11.          (unsigned char*)"ncacn_ip_tcp",    
  12.          (unsigned char*)"localhost" /*NULL*/,    
  13.          (unsigned char*)"13521",    
  14.          NULL,    
  15.          &pszStringBinding    
  16.      );   
  17.        
  18.      // 後面都相同   
  19.      ...    
  20. }  
 
別的地方都是同樣的。

示例下載
相關文章
相關標籤/搜索