SERVER.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:
Windows编程
开发平台:
Visual C++
- /*************************************************************/
- /** **/
- /** Microsoft RPC Examples **/
- /** OSF DCE Interop Application **/
- /** Copyright(c) Microsoft Corp. 1993-1996 **/
- /** **/
- /*************************************************************/
- #include <stdlib.h>
- #include <stdio.h>
- #include <ctype.h>
- #include "msg.h" /* header file generated by M/IDL compiler */
- #if defined(__RPC_WIN32__) || defined(__RPC_DOS__)
- /*
- On MS platforms we must include the dceport.h header file
- which maps OSF DCE style APIs to MS style APIs.
- Currently, we must also define a common interface handle name.
- */
- #include "dceport.h"
- #else
- #include <pthread.h>
- #endif
- #ifndef _CRTAPI1
- #define _CRTAPI1
- #endif
- void Usage()
- {
- printf("Usage : server -e <endpoint> - optional endpointn");
- printf(" -t <transport> - optional, default ncacn_ip_tcpn");
- exit(1);
- }
- int _CRTAPI1
- main(int argc, char *argv[])
- {
- unsigned32 status;
- unsigned char * pszProtocolSequence = (unsigned char *)"ncacn_ip_tcp";
- unsigned char * pszEndpoint = NULL;
- unsigned int cMaxCalls = 20;
- rpc_binding_vector_p_t pbvBindings = NULL;
- int i;
- printf ("Microsoft RPC Demo - OSF DCE Interop Message Servern");
- for (i = 1; i < argc; i++) {
- if ((*argv[i] == '-') || (*argv[i] == '/')) {
- switch (tolower(*(argv[i]+1))) {
- case 'e':
- pszEndpoint = (unsigned char *)argv[++i];
- break;
- case 't':
- pszProtocolSequence = (unsigned char *)argv[++i];
- break;
- case 'h':
- case '?':
- default:
- Usage();
- }
- }
- else
- Usage();
- }
- if (pszEndpoint != NULL)
- {
- /*
- Since we have an explict endpoint, use it and
- wait for client requests.
- */
- rpc_server_use_protseq_ep(pszProtocolSequence,
- cMaxCalls,
- pszEndpoint,
- &status);
- if (status) {
- printf("rpc_server_use_protseq_ep returned 0x%xn", status);
- return status;
- }
- }
- else
- {
- /*
- No explict endpoint, use the protocol sequence and register
- the endpoint with the endpoint mapper.
- */
- rpc_server_use_protseq(pszProtocolSequence,
- cMaxCalls,
- &status);
- if (status) {
- printf("rpc_server_use_protseq returned 0x%xn", status);
- return status;
- }
- rpc_server_inq_bindings(&pbvBindings, &status);
- if (status) {
- printf("rpc_server_inq_bindings returned 0x%xn", status);
- return status;
- }
- rpc_ep_register(interop_v1_0_s_ifspec,
- pbvBindings,
- 0,
- 0,
- &status);
- if (status) {
- printf("rpc_ep_register returned 0x%xn", status);
- return status;
- }
- }
- rpc_server_register_if(interop_v1_0_s_ifspec,
- 0,
- 0,
- &status);
- if (status) {
- printf("rpc_server_register_if returned 0x%xn", status);
- return status;
- }
- printf("RPC server readyn");
- rpc_server_listen(cMaxCalls,&status);
- if (status) {
- printf("rpc_server_listen returned: 0x%xn", status);
- return status;
- }
- rpc_server_unregister_if(interop_v1_0_s_ifspec,
- 0,
- &status);
- if (status) {
- printf("rpc_server_unregister_if returned 0x%xn", status);
- return status;
- }
- if (pszEndpoint == NULL)
- {
- /*
- Unregister from endpoint mapper
- */
- rpc_ep_unregister(interop_v1_0_s_ifspec,
- pbvBindings,
- 0,
- &status);
- if (status) {
- printf("rpc_ep_unregister returned 0x%xn", status);
- return status;
- }
- rpc_binding_vector_free(&pbvBindings, &status);
- if (status) {
- printf("rpc_binding_vector_free returned 0x%xn", status);
- return status;
- }
- }
- }