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

Windows编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.                    Microsoft RPC Version 2.0
  3.            Copyright Microsoft Corp. 1992, 1993, 1994- 1996
  4.                         xmit Example
  5.     FILE:       xmits.c
  6.     USAGE:      xmits  -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 xmit
  12.     FUNCTIONS:  main() - registers server as RPC server
  13.     COMMENTS:   This sample program generates a linked list to
  14.                 demonstrate how the list can be transmitted over
  15.                 the network more efficiently as a sized array.
  16.                 The pointers are rebuilt on the server side.
  17.                 The [transmit_as] attribute (used in the typedef of
  18.                 DOUBLE_LINK_TYPE in the file XMIT.IDL) requires the
  19.                 four user-supplied functions whose names start with
  20.                 the name of the presented type, DOUBLE_LINK_TYPE.
  21.                 The [in, out] attributes applied to remote procedure
  22.                 parameters require the two user-supplied functions
  23.                 midl_user_allocate and midl_user_free.
  24.                 The other functions are utilities that are used to
  25.                 build or display the data structures.
  26. ****************************************************************************/
  27. #include <stdlib.h>
  28. #include <stdio.h>
  29. #include <ctype.h>
  30. #include "xmit.h"     // header file generated by MIDL compiler
  31. #include "xmitu.h"    // Function prototypes for utility functions
  32. #define PURPOSE 
  33. "This Microsoft RPC Version 2.0 sample program demonstratesn
  34. the use of the [transmit_as] attribute. For more informationn
  35. about the attributes and the RPC API functions, see then
  36. RPC programming guide and reference.nn"
  37. void Usage(char * pszProgramName)
  38. {
  39.     fprintf(stderr, "%s", PURPOSE);
  40.     fprintf(stderr, "Usage:  %sn", pszProgramName);
  41.     fprintf(stderr, " -p protocol_sequencen");
  42.     fprintf(stderr, " -e endpointn");
  43.     fprintf(stderr, " -m maxcallsn");
  44.     fprintf(stderr, " -n mincallsn");
  45.     fprintf(stderr, " -f flag_wait_opn");
  46.     exit(1);
  47. }
  48. /* main:  register the interface, start listening for clients */
  49. void _CRTAPI1 main(int argc, char * argv[])
  50. {
  51.     RPC_STATUS status;
  52.     unsigned char * pszProtocolSequence = "ncacn_np";
  53.     unsigned char * pszSecurity         = NULL;
  54.     unsigned char * pszEndpoint         = "\pipe\xmit";
  55.     unsigned int    cMinCalls           = 1;
  56.     unsigned int    cMaxCalls           = 20;
  57.     unsigned int    fDontWait           = FALSE;
  58.     int i;
  59.     /* allow the user to override settings with command line switches */
  60.     for (i = 1; i < argc; i++) {
  61.         if ((*argv[i] == '-') || (*argv[i] == '/')) {
  62.             switch (tolower(*(argv[i]+1))) {
  63.             case 'p':  // protocol sequence
  64.                 pszProtocolSequence = argv[++i];
  65.                 break;
  66.             case 'e':
  67.                 pszEndpoint = argv[++i];
  68.                 break;
  69.             case 'm':
  70.                 cMaxCalls = (unsigned int) atoi(argv[++i]);
  71.                 break;
  72.             case 'n':
  73.                 cMinCalls = (unsigned int) atoi(argv[++i]);
  74.                 break;
  75.             case 'f':
  76.                 fDontWait = (unsigned int) atoi(argv[++i]);
  77.                 break;
  78.             case 'h':
  79.             case '?':
  80.             default:
  81.                 Usage(argv[0]);
  82.             }
  83.         }
  84.         else
  85.             Usage(argv[0]);
  86.     }
  87.     status = RpcServerUseProtseqEp(pszProtocolSequence,
  88.                                    cMaxCalls,
  89.                                    pszEndpoint,
  90.                                    pszSecurity);  // Security descriptor
  91.     printf("RpcServerUseProtseqEp returned 0x%xn", status);
  92.     if (status) {
  93.         exit(status);
  94.     }
  95.     status = RpcServerRegisterIf(xmit_ServerIfHandle,  // interface to register
  96.                                  NULL,   // MgrTypeUuid
  97.                                  NULL);  // MgrEpv; null means use default
  98.     printf("RpcServerRegisterIf returned 0x%xn", status);
  99.     if (status) {
  100.         exit(status);
  101.     }
  102.     printf("Calling RpcServerListenn");
  103.     status = RpcServerListen(cMinCalls,
  104.                              cMaxCalls,
  105.                              fDontWait);
  106.     printf("RpcServerListen returned: 0x%xn", status);
  107.     if (status) {
  108.         exit(status);
  109.     }
  110.     if (fDontWait) {
  111.         printf("Calling RpcMgmtWaitServerListenn");
  112.         status = RpcMgmtWaitServerListen();  //  wait operation
  113.         printf("RpcMgmtWaitServerListen returned: 0x%xn", status);
  114.         if (status) {
  115.             exit(status);
  116.         }
  117.     }
  118. }  // end main()
  119. /* end file xmits.c */