C-Server/Client ONC RPC's

foexle

foexle

Kaiser
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
 
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
 

Ähnliche Themen

eggdrop auf vserver / connection timeout

Zurück
Oben