C-Server/Client ONC RPC's

Dieses Thema im Forum "C/C++" wurde erstellt von foexle, 12.12.2007.

  1. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    Hoi männers
    ich hab schon diverse guides durchgelesen wegen rpc middleware.
    Aber irgendwie machts einfach nicht klick bei mir.

    Folgende Fragen hätte ich:

    in dieser Datei die ich meinem rpcgen gebe die mit einem .x endet, müssen da alle function rein die ich bei meinem client /server nutze ? oder einfach nur send und resive weil mehr brauch ich nicht.
    SO wenn ich das hinter mir habe, bekomme ich doch 2 stubs,einmal client und einmal server stub das ist ja die middleware und eine headerfile.
    Nun binde ich die headerfile in meinen client und server ein.
    Aber wie rufe ich nun die funktionen send resive auf?
    ein einfach funktionsaufruf ist in all den bsp nicht möglich ... also ich verstehe noch nicht so ganz die anbindung von meinem client/server an die middleware

    wäre super wenn da wer ein gutes tutorial hat ... mal schaun ob da noch eins dabei ist das ich noch nicht gelesen habe ...

    die die ich gefunden habe helfen nur leuten was die sich intensiv mit C beschäftigt haben ...

    danke schonmal
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    sers Leute ...
    also hab nun ein bisschen rumgesucht und mal bischen probiert ...
    aus demo zwecken, habe ich mir einfach mal die beispiele von SUN geschnappt und die einfach mal compeliert
    Code:
    der Server
    
    #include <stdio.h>
    #include "msg.h"			/* msg.h generated by rpcgen*/
     
    int *
    printmessage_1_svc(msg, req)
    	char **msg;	
    	struct svc_req *req;		/* details of call */
    {
    	static int result;			/* must be static! */
    	FILE *f;
     
    	f = fopen("/dev/console", "w");
    	if (f == (FILE *)NULL) {
    		result = 0;
    		return (&result);
    	}
    	fprintf(f, "%s\n", *msg);
    	fclose(f);
    	result = 1;
    	return (&result);
    }
    
    Code:
    die header datei
    
    #ifndef _MSG_H_RPCGEN
    #define _MSG_H_RPCGEN
    
    #include <rpc/rpc.h>
    
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    
    #define MESSAGEPROG 0x20000001
    #define PRINTMESSAGEVERS 1
    
    #if defined(__STDC__) || defined(__cplusplus)
    #define PRINTMESSAGE 1
    extern  int * printmessage_1(char **, CLIENT *);
    extern  int * printmessage_1_svc(char **, struct svc_req *);
    extern int messageprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
    
    #else /* K&R C */
    #define PRINTMESSAGE 1
    extern  int * printmessage_1();
    extern  int * printmessage_1_svc();
    extern int messageprog_1_freeresult ();
    #endif /* K&R C */
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif /* !_MSG_H_RPCGEN */
    
    Code:
    der client
    
    #include <stdio.h>
    #include "msg.h"			/* msg.h generated by rpcgen */
     
    main(argc, argv)
    	int argc;
    	char *argv[];
    {
    	CLIENT *clnt;
    	int *result;
    	char *server;
    	char *message;
     
    	if (argc != 3) {
    		fprintf(stderr, "usage: %s host message\n", argv[0]);
    		exit(1);
    	}
     
    	server = argv[1];
    	message = argv[2];
    	/*
    	 * Create client "handle" used for 
     	 * calling MESSAGEPROG on the server
    	 * designated on the command line.
    	 */
    	clnt = clnt_create(server, MESSAGEPROG,PRINTMESSAGEVERS, "visible");
    	if (clnt == (CLIENT *)NULL) {
    		/*
    		 * Couldn't establish connection
       		 * with server.
    		 * Print error message and die.
    		 */
    		clnt_pcreateerror(server);
    		exit(1);
    	}
    	
    	/*
    	 * Call the remote procedure
     	 * "printmessage" on the server
    	 */
    	result = printmessage_1(&message, clnt);
    	if (result == (int *)NULL) {
    		/*
    		 * An error occurred while calling 
      	         * the server.
    		 * Print error message and die.
    		 */
    		clnt_perror(clnt, server);
    		exit(1);
    	}
    	/* Okay, we successfully called 
     	 * the remote procedure. 
     	 */
    	if (*result == 0) {
    		/*
    		 * Server was unable to print 
        		 * our message.
    		 * Print error message and die.
    		 */
    		fprintf(stderr,
    		"%s: could not print your message\n",argv[0]);
    		exit(1);
    	}
     
    	/* The message got printed on the
     	 * server's console
     	 */
    	printf("Message delivered to %s\n",server);
    	clnt_destroy( clnt );
    	exit(0);
    }
    
    also ich musste bei dem server den functionsaufruf ändern
    da stand bei sun

    printmessage_1(msg, req)

    was aber nicht mit den typen übereinstimmt, die in der headerfile gefordert sind.
    da habsch den aufruf in

    printmessage_1_svc(msg, req) geändert

    soweit so gut compelieren ging ...
    aber der server wenn ich ihn starte meldet er sich nicht beim portmapper an ... wenn ich eine nachricht senden will mit meinem client bekomme ich folgende fehler Nachricht.

    127.0.0.1: RPC: Unknown protocol

    da nehme ich an, das der server sich nicht angemeldet hat?
    sry bin noch nicht so bewandert in sachen C

    wäre super wenn mir wer da auf die sprünge helfen könnte woran das liegt

    mfg foexle
     
Thema:

C-Server/Client ONC RPC's