CLIENT.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*************************************************************/
  2. /**                                                         **/
  3. /**                 Microsoft RPC Examples                  **/
  4. /**                 OSF DCE Sample Application              **/
  5. /**           Copyright(c) Microsoft Corp. 1992-1996        **/
  6. /**                                                         **/
  7. /*************************************************************/
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <ctype.h>
  12. #include "msg.h"        /* header file generated by M/IDL compiler */
  13. #if defined(__RPC_WIN32__) || defined(__RPC_DOS__)
  14. /*
  15.  On MS platforms we must include the dceport.h header file
  16.  which maps OSF DCE style APIs to MS style APIs.
  17. */
  18. #include "dceport.h"
  19. #else
  20. #include <pthread.h>
  21. #endif
  22. #ifndef _CRTAPI1
  23. #define _CRTAPI1
  24. #endif
  25. void Usage()
  26. {
  27.   printf("Usage : client -n <server_name>n");
  28.   printf("               -t <transport>   - optional, default ncacn_ip_tcpn");
  29.   printf("               -e <endpoint>    - optional, should match servern");
  30.   printf("               -s <message>     - optional, send a different messagen");
  31.   printf("               -x               - use to stop the servern");
  32.   exit(1);
  33. }
  34. int _CRTAPI1
  35. main(int argc, char *argv[])
  36. {
  37.     unsigned32 status;
  38.     unsigned char * pszProtocolSequence = (unsigned char *)"ncacn_ip_tcp";
  39.     unsigned char * pszNetworkAddress   = NULL;
  40.     unsigned char * pszEndpoint         = NULL;
  41.     unsigned char * pszStringBinding    = NULL;
  42.     unsigned char * pszMessage          = (unsigned char *)"Hello World";
  43.     int fStopServer = 0;
  44.     int i;
  45.     printf ("Microsoft RPC Demo - OSF DCE Interop Message Clientn");
  46.     for (i = 1; i < argc; i++) {
  47.         if ((*argv[i] == '-') || (*argv[i] == '/')) {
  48.             switch (tolower(*(argv[i]+1))) {
  49.             case 'n':  /* network address */
  50.                 pszNetworkAddress = (unsigned char *)argv[++i];
  51.                 break;
  52.             case 't':  /* protocol sequence */
  53.                 pszProtocolSequence = (unsigned char *)argv[++i];
  54.                 break;
  55.             case 'e':  /* network endpoint */
  56.                 pszEndpoint = (unsigned char *)argv[++i];
  57.                 break;
  58.             case 's':  /* update message */
  59.                 pszMessage = (unsigned char *)argv[++i];
  60.                 break;
  61.             case 'x':  /* stop the server */
  62.                 fStopServer = 1;
  63.                 break;
  64.             case 'h':
  65.             case '?':
  66.             default:
  67.                 Usage();
  68.             }
  69.         }
  70.         else
  71.             Usage();
  72.     }
  73.     rpc_string_binding_compose(0,   /* no object uuid */
  74.                                pszProtocolSequence,
  75.                                pszNetworkAddress,
  76.                                pszEndpoint,
  77.                                0,  /* no options */
  78.                                &pszStringBinding,
  79.                                &status);
  80.     if (status) {
  81.         printf("rpc_string_binding_compose returned 0x%xn", status);
  82.         return(status);
  83.     }
  84.     rpc_binding_from_string_binding(pszStringBinding,
  85.                                     &interop_binding_handle,
  86.                                     &status);
  87.     if (status) {
  88.         printf("rpc_binding_from_string_binding returned 0x%xn", status);
  89.         return(status);
  90.     }
  91.     rpc_string_free(&pszStringBinding,&status);
  92.     if (status) {
  93.         printf("rpc_string_free returned 0x%xn", status);
  94.         return(status);
  95.     }
  96.     TRY {
  97.        ClientMessage(pszMessage);
  98.        printf("Message sent okayn");
  99.        if (fStopServer)
  100.            {
  101.            ShutdownServer();
  102.            printf("Server shutdownn");
  103.            }
  104.     }
  105.     CATCH_ALL {
  106.        printf("RPC raised exception 0x%xn", THIS_CATCH);
  107.     }
  108.     ENDTRY
  109.     rpc_binding_free(&interop_binding_handle, &status);
  110.     if (status) {
  111.         printf("rpc_binding_free returned 0x%xn", status);
  112.         return(status);
  113.     }
  114.     return(0);
  115. }