|
|
1.1 root 1: /****************************************************************************
2: Microsoft RPC Version 1.0 Alpha
3: October 1991
4: Hello3 Example
5: FILE: hello3\client.c
6: USAGE: client <servername>
7: where <servername> is the name of the server running
8: the server side of the distributed application
9: PURPOSE: Client side of RPC distributed application hello3
10: FUNCTIONS: main() - binds to server,
11: calls remote procedure HelloProc2
12: COMMENTS:
13: This distributed application prompts the user for a string and
14: calls a remote procedure that displays that string. The client
15: manages its connection to the server using the binding handle
16: hRpcHello that is defined in the file hello3.h (from hello3.acf).
17:
18: ****************************************************************************/
19: #include <stdio.h>
20: #include <string.h>
21: #include <stdlib.h>
22: #include <rpc.h> // RPC API functions, types
23: #include "hello3.h" // RPC data for this interface
24:
25: #define MAXSTRING 300 // arbitrary large string size
26:
27: void main(int argc, char **argv)
28: {
29: RPC_STATUS status; // returned by RPC API function
30: char * pszRpcPort = "hello3";
31: char szServerPath[MAXSTRING]; // complete path
32: char szString[MAXSTRING]; // message to server
33:
34: /* Select named pipes as the transport type and provide the */
35: /* path to the server and named pipe that is used for RPC. */
36: /* The client specifies the local pipe name in the form: */
37: /* \device\namedpipe\pipename */
38: /* The client specifies the remote pipe name in the form: */
39: /* \device\lanmanredirector\servername\pipe\pipename */
40: /* In this example, the pipename is "hello3" */
41:
42: if (argc == 2) {
43: strcpy(szServerPath, "\\device\\lanmanredirector\\");
44: strcat(szServerPath, argv[1]); // servername
45: strcat(szServerPath, "\\pipe\\");
46: strcat(szServerPath, pszRpcPort);
47: }
48: else {
49: strcpy(szServerPath, "\\device\\namedpipe\\");
50: strcat(szServerPath, pszRpcPort);
51: }
52:
53: hello3_ProtocolStack.TransportType = RPC_TRANSPORT_NAMEPIPE;
54:
55: hello3_ProtocolStack.TransportInfo = szServerPath;
56: hello3_ProtocolStack.TransportInfoLength = \
57: strlen(szServerPath) + 1; // add 1 for terminating null
58:
59: /* Call the Microsoft RPC V1.0 Alpha API function that allows */
60: /* the client to establish a connection with the server. */
61: /* NOTE: This function will probably be replaced in future */
62: /* releases by the standard DCE RPC function. */
63:
64: status = RpcBindToInterface(&hello3_ProtocolStack,
65: 0L,
66: &hrpcHello);
67: if (status) {
68: printf("RpcBindToInterface returned 0x%x\n", status);
69: printf("%s length = %d\n", hello3_ProtocolStack.TransportInfo,
70: hello3_ProtocolStack.TransportInfoLength);
71: exit(2);
72: }
73:
74: printf("Enter a string to send to the server: ");
75: gets(szString);
76: HelloProc3(szString); // call the remote procedure
77:
78: status = RpcUnbind(hrpcHello); // remote calls complete; unbind
79: if (status) {
80: printf("RpcUnbind returned 0x%x\n", status);
81: exit(2);
82: }
83: exit(0);
84: } /* end main() */
85: /* end hello3\client.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.