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

Windows编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.                    Microsoft RPC Version 2.0
  3.            Copyright Microsoft Corp. 1992, 1993, 1994- 1996
  4.                          mandel Example
  5.     FILE:       server.c
  6.     USAGE:      server  -p protocol_sequence
  7.                         -e endpoint
  8.                         -m max calls
  9.                         -n min calls
  10.                         -f flag for RpcServerListen
  11.     PURPOSE:    Server side of RPC distributed application mandel
  12.     FUNCTIONS:  main() - registers interface and listen for clients
  13. ****************************************************************************/
  14. #include <stdlib.h>
  15. #include <stdio.h>
  16. #include <ctype.h>
  17. #include "mdlrpc.h"    // header file generated by MIDL compiler
  18. void Usage(char * pszProgramName)
  19. {
  20.     fprintf(stderr, "Usage:  %sn", pszProgramName);
  21.     fprintf(stderr, " -p protocol_sequencen");
  22.     fprintf(stderr, " -e endpointn");
  23.     fprintf(stderr, " -m maxcallsn");
  24.     fprintf(stderr, " -n mincallsn");
  25.     fprintf(stderr, " -f flag_wait_opn");
  26.     exit(1);
  27. }
  28. void _CRTAPI1 main(int argc, char * argv[])
  29. {
  30.     RPC_STATUS status;
  31.     unsigned char * pszProtocolSequence = "ncacn_np";
  32.     unsigned char * pszSecurity         = NULL;
  33.     unsigned char * pszEndpoint         = "\pipe\mandel";
  34.     unsigned int    cMinCalls           = 1;
  35.     unsigned int    cMaxCalls           = 20;
  36.     unsigned int    fDontWait           = FALSE;
  37.     int i;
  38.     /* allow the user to override settings with command line switches */
  39.     for (i = 1; i < argc; i++) {
  40.         if ((*argv[i] == '-') || (*argv[i] == '/')) {
  41.             switch (tolower(*(argv[i]+1))) {
  42.             case 'p':  // protocol sequence
  43.                 pszProtocolSequence = argv[++i];
  44.                 break;
  45.             case 'e':
  46.                 pszEndpoint = argv[++i];
  47.                 break;
  48.             case 'm':
  49.                 cMaxCalls = (unsigned int) atoi(argv[++i]);
  50.                 break;
  51.             case 'n':
  52.                 cMinCalls = (unsigned int) atoi(argv[++i]);
  53.                 break;
  54.             case 'f':
  55.                 fDontWait = (unsigned int) atoi(argv[++i]);
  56.                 break;
  57.             case 'h':
  58.             case '?':
  59.             default:
  60.                 Usage(argv[0]);
  61.             }
  62.         }
  63.         else
  64.             Usage(argv[0]);
  65.     }
  66.     status = RpcServerUseProtseqEp(pszProtocolSequence,
  67.                                    cMaxCalls,
  68.                                    pszEndpoint,
  69.                                    pszSecurity);  // Security descriptor
  70.     printf("RpcServerUseProtseqEp returned 0x%xn", status);
  71.     if (status) {
  72.         exit(status);
  73.     }
  74.     status = RpcServerRegisterIf(mdlrpc_ServerIfHandle, // interface to register
  75.                                  NULL,   // MgrTypeUuid
  76.                                  NULL);  // MgrEpv; null means use default
  77.     printf("RpcServerRegisterIf returned 0x%xn", status);
  78.     if (status) {
  79.         exit(status);
  80.     }
  81.     printf("Calling RpcServerListenn");
  82.     status = RpcServerListen(cMinCalls,
  83.                              cMaxCalls,
  84.                              fDontWait);
  85.     printf("RpcServerListen returned: 0x%xn", status);
  86.     if (status) {
  87.         exit(status);
  88.     }
  89.     if (fDontWait) {
  90.         printf("Calling RpcMgmtWaitServerListenn");
  91.         status = RpcMgmtWaitServerListen();  //  wait operation
  92.         printf("RpcMgmtWaitServerListen returned: 0x%xn", status);
  93.         if (status) {
  94.             exit(status);
  95.         }
  96.     }
  97. } // end main()
  98. /*********************************************************************/
  99. /*                MIDL allocate and free                             */
  100. /*********************************************************************/
  101. void __RPC_FAR * __RPC_API midl_user_allocate(size_t len)
  102. {
  103.     return(malloc(len));
  104. }
  105. void __RPC_API midl_user_free(void __RPC_FAR * ptr)
  106. {
  107.     free(ptr);
  108. }
  109. /* end server.c */