From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../Praktikum2/Vorgabe/Makefile.addiere | 45 +++++++++ .../Verteilte Systeme/Praktikum2/Vorgabe/README | 75 ++++++++++++++ .../Verteilte Systeme/Praktikum2/Vorgabe/addiere.x | 10 ++ .../Vorgabe/addiere_client.c_NACH_Ergaenzung | 58 +++++++++++ .../Vorgabe/addiere_server.c_NACH_Ergaenzung | 23 +++++ .../Praktikum2/loesung/Makefile.telbuch | 46 +++++++++ .../Verteilte Systeme/Praktikum2/loesung/telbuch | 9 ++ .../Verteilte Systeme/Praktikum2/loesung/telbuch.h | 73 ++++++++++++++ .../Verteilte Systeme/Praktikum2/loesung/telbuch.x | 24 +++++ .../Praktikum2/loesung/telbuch_client.c | 108 +++++++++++++++++++++ .../Praktikum2/loesung/telbuch_clnt.c | 40 ++++++++ .../Praktikum2/loesung/telbuch_server.c | 78 +++++++++++++++ .../Praktikum2/loesung/telbuch_svc.c | 98 +++++++++++++++++++ .../Praktikum2/loesung/telbuch_xdr.c | 45 +++++++++ .../Praktikum2/loesung_neu/Makefile.addiere | 45 +++++++++ .../Praktikum2/loesung_neu/Makefile.phonebook | 46 +++++++++ .../Praktikum2/loesung_neu/addiere.h | 53 ++++++++++ .../Praktikum2/loesung_neu/addiere_client | Bin 0 -> 19118 bytes .../Praktikum2/loesung_neu/addiere_client.c | 58 +++++++++++ .../loesung_neu/addiere_client.c_NACH_Ergaenzung | 58 +++++++++++ .../Praktikum2/loesung_neu/addiere_clnt.c | 25 +++++ .../Praktikum2/loesung_neu/addiere_server | Bin 0 -> 22476 bytes .../Praktikum2/loesung_neu/addiere_server.c | 23 +++++ .../loesung_neu/addiere_server.c_NACH_Ergaenzung | 23 +++++ .../Praktikum2/loesung_neu/addiere_svc.c | 91 +++++++++++++++++ .../Praktikum2/loesung_neu/addiere_xdr.c | 18 ++++ .../Praktikum2/loesung_neu/phonebook.dat | 4 + .../Praktikum2/loesung_neu/phonebook.h | 73 ++++++++++++++ .../Praktikum2/loesung_neu/phonebook.x | 20 ++++ .../Praktikum2/loesung_neu/phonebook_client | Bin 0 -> 22007 bytes .../Praktikum2/loesung_neu/phonebook_client.c | 79 +++++++++++++++ .../Praktikum2/loesung_neu/phonebook_clnt.c | 40 ++++++++ .../Praktikum2/loesung_neu/phonebook_server | Bin 0 -> 26944 bytes .../Praktikum2/loesung_neu/phonebook_server.c | 84 ++++++++++++++++ .../Praktikum2/loesung_neu/phonebook_svc.c | 98 +++++++++++++++++++ .../Praktikum2/loesung_neu/phonebook_xdr.c | 45 +++++++++ .../Praktikum2/loesung_neu/readme | 75 ++++++++++++++ 37 files changed, 1690 insertions(+) create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/Makefile.addiere create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/README create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere.x create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_client.c_NACH_Ergaenzung create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_server.c_NACH_Ergaenzung create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/Makefile.telbuch create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.h create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.x create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_client.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_clnt.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_server.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_svc.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_xdr.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c create mode 100644 Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme (limited to 'Bachelor/Verteilte Systeme/Praktikum2') diff --git a/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/Makefile.addiere b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/Makefile.addiere new file mode 100644 index 0000000..6d59a66 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/Makefile.addiere @@ -0,0 +1,45 @@ + +# This is a template Makefile generated by rpcgen + +# Parameters + +CLIENT = addiere_client +SERVER = addiere_server + +SOURCES_CLNT.c = +SOURCES_CLNT.h = +SOURCES_SVC.c = +SOURCES_SVC.h = +SOURCES.x = addiere.x + +TARGETS_SVC.c = addiere_svc.c addiere_server.c addiere_xdr.c +TARGETS_CLNT.c = addiere_clnt.c addiere_client.c addiere_xdr.c +TARGETS = addiere.h addiere_xdr.c addiere_clnt.c addiere_svc.c addiere_client.c addiere_server.c + +OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o) +OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o) +# Compiler flags + +CFLAGS += -g +RPCGENFLAGS = + +# Targets + +all : $(CLIENT) $(SERVER) + +$(TARGETS) : $(SOURCES.x) + rpcgen $(RPCGENFLAGS) $(SOURCES.x) + +$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c) + +$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c) + +$(CLIENT) : $(OBJECTS_CLNT) + $(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS) + +$(SERVER) : $(OBJECTS_SVC) + $(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS) + + clean: + $(RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER) + diff --git a/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/README b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/README new file mode 100644 index 0000000..8331f10 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/README @@ -0,0 +1,75 @@ +1. Zunaechst werde aus dem IDL Interface addiere.x mit dem PRC Compiler die Rumpsdateien erzeugt. + $ ls -al + $ ls -al + drwxrwxr-x 2 as users 4096 Jan 29 11:47 . + drwxrwxr-x 4 as users 4096 Jan 29 11:45 .. + -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x + $ + $ ppcgen -a addiere.x + $ rpcgen -a addiere.x + $ ll + insgesamt 48 + -rw-rw-r-- 1 as users 784 Jan 29 11:50 addiere_client.c + -rw-rw-r-- 1 as users 551 Jan 29 11:50 addiere_clnt.c + -rw-rw-r-- 1 as users 973 Jan 29 11:50 addiere.h + -rw-rw-r-- 1 as users 318 Jan 29 11:50 addiere_server.c + -rw-rw-r-- 1 as users 2111 Jan 29 11:50 addiere_svc.c + -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x + -rw-rw-r-- 1 as users 294 Jan 29 11:50 addiere_xdr.c + -rw-rw-r-- 1 as users 1118 Jan 29 11:50 Makefile.addiere + $ + +2. Nun ist die Aenderung am Client- und am Server-Programm durchzufuehren: + $ vi addiere_client.c + ... + $ + $ vi addiere_client.c + ... + $ + Beispiele sind "addiere_client.c_NACH_Ergaenzung" und "addiere_client.c_VOR_Ergaenzung" + +3. Nun ist alles mit dem erzeugten Makefile zu generieren. Jeweils auf Server und Client-Rechner. + $ make -f Makefile.addiere + $ make -f Makefile.addiere + cc -g -c -o addiere_clnt.o addiere_clnt.c + cc -g -c -o addiere_client.o addiere_client.c + cc -g -c -o addiere_xdr.o addiere_xdr.c + cc -g -o addiere_client addiere_clnt.o addiere_client.o addiere_xdr.o -lnsl + cc -g -c -o addiere_svc.o addiere_svc.c + cc -g -c -o addiere_server.o addiere_server.c + cc -g -o addiere_server addiere_svc.o addiere_server.o addiere_xdr.o -lnsl + $ + $ ls -l + insgesamt 280 + -rwxrwxr-x 1 as users 42669 Jan 29 11:55 addiere_client + -rw-rw-r-- 1 as users 784 Jan 29 11:50 addiere_client.c + -rw-rw-r-- 1 as users 28228 Jan 29 11:55 addiere_client.o + -rw-rw-r-- 1 as users 551 Jan 29 11:50 addiere_clnt.c + -rw-rw-r-- 1 as users 27728 Jan 29 11:55 addiere_clnt.o + -rw-rw-r-- 1 as users 973 Jan 29 11:50 addiere.h + -rwxrwxr-x 1 as users 44808 Jan 29 11:55 addiere_server + -rw-rw-r-- 1 as users 318 Jan 29 11:50 addiere_server.c + -rw-rw-r-- 1 as users 27288 Jan 29 11:55 addiere_server.o + -rw-rw-r-- 1 as users 2111 Jan 29 11:50 addiere_svc.c + -rw-rw-r-- 1 as users 30480 Jan 29 11:55 addiere_svc.o + -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x + -rw-rw-r-- 1 as users 294 Jan 29 11:50 addiere_xdr.c + -rw-rw-r-- 1 as users 27380 Jan 29 11:55 addiere_xdr.o + -rw-rw-r-- 1 as users 1118 Jan 29 11:50 Makefile.addiere + $ + +4. Fertig - nun kann der Server gestartet werden und Clients können Anfragen stellen: + Server (linux): + $ addiere_server & + [2] 2672 + $ ps + PID TTY TIME CMD + 27586 pts/5 00:00:00 bash + 2672 pts/1 00:00:00 addiere_server + 2673 pts/1 00:00:00 ps + $ + + Client: + $ addiere_client linux + addiere(5,6) liefert 11 + $ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere.x b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere.x new file mode 100644 index 0000000..5ffdad9 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere.x @@ -0,0 +1,10 @@ +struct add_struct { + int p1; + int p2; +}; + +program ADDIERE_TEST { + version ONE { + int addiere(add_struct p) = 1; + } = 1; +} = 1234567; diff --git a/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_client.c_NACH_Ergaenzung b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_client.c_NACH_Ergaenzung new file mode 100644 index 0000000..e6b9887 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_client.c_NACH_Ergaenzung @@ -0,0 +1,58 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "addiere.h" + + +void +addiere_test_1(char *host) +{ + CLIENT *clnt; + int *result_1; + add_struct addiere_1_arg; + +#ifndef DEBUG + clnt = clnt_create (host, ADDIERE_TEST, ONE, "udp"); + if (clnt == NULL) { + clnt_pcreateerror (host); + exit (1); + } +#endif /* DEBUG */ + + /* my code START */ + addiere_1_arg.p1 = 5; + addiere_1_arg.p2 = 6; + /* my code END */ + + result_1 = addiere_1(&addiere_1_arg, clnt); + if (result_1 == (int *) NULL) { + clnt_perror (clnt, "call failed"); + } + /* my code START */ + else { + printf("addiere(5,6) liefert %d\n", *result_1); + } + /* my code END */ + +#ifndef DEBUG + clnt_destroy (clnt); +#endif /* DEBUG */ +} + + +int +main (int argc, char *argv[]) +{ + char *host; + + if (argc < 2) { + printf ("usage: %s server_host\n", argv[0]); + exit (1); + } + host = argv[1]; + addiere_test_1 (host); +exit (0); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_server.c_NACH_Ergaenzung b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_server.c_NACH_Ergaenzung new file mode 100644 index 0000000..3f8bb84 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/Vorgabe/addiere_server.c_NACH_Ergaenzung @@ -0,0 +1,23 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "addiere.h" + +int * +addiere_1_svc(add_struct *argp, struct svc_req *rqstp) +{ + static int result; + + /* + * insert server code here + */ + + /* my Code START */ + result = argp->p1 + argp->p2; + /* my Code END */ + + return &result; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/Makefile.telbuch b/Bachelor/Verteilte Systeme/Praktikum2/loesung/Makefile.telbuch new file mode 100644 index 0000000..b744044 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/Makefile.telbuch @@ -0,0 +1,46 @@ + +# This is a template Makefile generated by rpcgen + +# Parameters + +CLIENT = telbuch_client +SERVER = telbuch_server + +SOURCES_CLNT.c = +SOURCES_CLNT.h = +SOURCES_SVC.c = +SOURCES_SVC.h = +SOURCES.x = telbuch.x + +TARGETS_SVC.c = telbuch_svc.c telbuch_server.c telbuch_xdr.c +TARGETS_CLNT.c = telbuch_clnt.c telbuch_client.c telbuch_xdr.c +TARGETS = telbuch.h telbuch_xdr.c telbuch_clnt.c telbuch_svc.c telbuch_client.c telbuch_server.c + +OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o) +OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o) +# Compiler flags + +CFLAGS += -g +LDLIBS += -lnsl +RPCGENFLAGS = + +# Targets + +all : $(CLIENT) $(SERVER) + +$(TARGETS) : $(SOURCES.x) + rpcgen $(RPCGENFLAGS) $(SOURCES.x) + +$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c) + +$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c) + +$(CLIENT) : $(OBJECTS_CLNT) + $(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS) + +$(SERVER) : $(OBJECTS_SVC) + $(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS) + + clean: + $(RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER) + diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch new file mode 100644 index 0000000..d94773b --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch @@ -0,0 +1,9 @@ +Napp Kall 123456 +Meyer Petra 56789 +Schuster Willi 1234567 +Mueller Klaus 987654 +Schmidt Sabine 122112 +Meyer Klaus 08154711 +Schill Alfred 47110815 +Lopez Jenifer 0815 +Schmitz Frida 1234567 diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.h b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.h new file mode 100644 index 0000000..3938bfc --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.h @@ -0,0 +1,73 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#ifndef _TELBUCH_H_RPCGEN +#define _TELBUCH_H_RPCGEN + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +struct addStruct { + char Name[45]; + char TelNr[45]; +}; +typedef struct addStruct addStruct; + +struct searchStruct { + char Name[45]; +}; +typedef struct searchStruct searchStruct; + +struct Ergebnis { + char Eintrag[80]; +}; +typedef struct Ergebnis Ergebnis; + +#define TELBUCH_VERWALTUNG 1234567 +#define ONE 1 + +#if defined(__STDC__) || defined(__cplusplus) +#define addEntry 1 +extern Ergebnis * addentry_1(addStruct *, CLIENT *); +extern Ergebnis * addentry_1_svc(addStruct *, struct svc_req *); +#define searchEntry 2 +extern Ergebnis * searchentry_1(searchStruct *, CLIENT *); +extern Ergebnis * searchentry_1_svc(searchStruct *, struct svc_req *); +extern int telbuch_verwaltung_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); + +#else /* K&R C */ +#define addEntry 1 +extern Ergebnis * addentry_1(); +extern Ergebnis * addentry_1_svc(); +#define searchEntry 2 +extern Ergebnis * searchentry_1(); +extern Ergebnis * searchentry_1_svc(); +extern int telbuch_verwaltung_1_freeresult (); +#endif /* K&R C */ + +/* the xdr functions */ + +#if defined(__STDC__) || defined(__cplusplus) +extern bool_t xdr_addStruct (XDR *, addStruct*); +extern bool_t xdr_searchStruct (XDR *, searchStruct*); +extern bool_t xdr_Ergebnis (XDR *, Ergebnis*); + +#else /* K&R C */ +extern bool_t xdr_addStruct (); +extern bool_t xdr_searchStruct (); +extern bool_t xdr_Ergebnis (); + +#endif /* K&R C */ + +#ifdef __cplusplus +} +#endif + +#endif /* !_TELBUCH_H_RPCGEN */ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.x b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.x new file mode 100644 index 0000000..e28bc97 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch.x @@ -0,0 +1,24 @@ +struct addStruct +{ + char Name[45]; + char TelNr[45]; +}; + +struct searchStruct +{ + char Name[45]; +}; + +struct Ergebnis +{ + char Eintrag[80]; +}; + +program TELBUCH_VERWALTUNG +{ + version ONE + { + Ergebnis addEntry(addStruct eintrag) = 1; + Ergebnis searchEntry(searchStruct eintrag) = 2; + } = 1; +} = 1234567; diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_client.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_client.c new file mode 100644 index 0000000..cc846e2 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_client.c @@ -0,0 +1,108 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "telbuch.h" + + +void +telbuch_verwaltung_1(char *host) +{ + CLIENT *clnt; + +#ifndef DEBUG + clnt = clnt_create (host, TELBUCH_VERWALTUNG, ONE, "udp"); + if (clnt == NULL) { + clnt_pcreateerror (host); + exit (1); + } +#endif /* DEBUG */ + + + /* my code START */ + addStruct addentry_1_arg; + searchStruct searchentry_1_arg; + Ergebnis* result; + void* erg; + int w; + char name[41]; + char nname[20]; + char vname[20]; + char telnr[20]; + + printf("\nOptionen:"); + printf("\n1. Eintrag suchen"); + printf("\n2. Eintrag eintragen"); + printf("\n0. Beenden"); + printf("\n\nWahl: "); + scanf("%d",&w); + + switch (w) + { + case 1: // Nach Eintrag suchen + printf("\nName: "); + scanf("%s %s",nname, vname); // Suchnamen lesen + + strcpy(name,nname); + strcat(name, " "); + strcat(name, vname); + strcpy(searchentry_1_arg.Name,name); // Parameter für Suche füllen + + result = searchentry_1(&searchentry_1_arg, clnt); // Suche durchführen + if (result == (Ergebnis *) NULL) + clnt_perror (clnt, "call failed"); + else + printf("%s\n",result->Eintrag); + break; + case 2: // Eintrag eintragen + printf("\nName: "); + scanf("%s %s",nname, vname); // Name lesen + printf("Nummer: "); + scanf("%s",telnr); // Nummer lesen + + strcpy(name, nname); + strcat(name, " "); + strcat(name, vname); + strcpy(addentry_1_arg.Name,name); // Parameter für Eintrag + strcpy(addentry_1_arg.TelNr,telnr); + result = addentry_1(&addentry_1_arg, clnt); // Eintragen durchführen + if (result == (Ergebnis *) NULL) + clnt_perror (clnt, "call failed"); + else + printf("%s\n",result->Eintrag); + break; + case 0: exit(0); + default: printf("Falsche Eingabe\n"); break; + } + /* my code END */ + + + /*result_1 = addentry_1(&addentry_1_arg, clnt); + if (result_1 == (Ergebnis *) NULL) { + clnt_perror (clnt, "call failed"); + } + result_2 = searchentry_1(&searchentry_1_arg, clnt); + if (result_2 == (Ergebnis *) NULL) { + clnt_perror (clnt, "call failed"); + }*/ +#ifndef DEBUG + clnt_destroy (clnt); +#endif /* DEBUG */ +} + + +int +main (int argc, char *argv[]) +{ + char *host; + + if (argc < 2) { + printf ("usage: %s server_host\n", argv[0]); + exit (1); + } + host = argv[1]; + telbuch_verwaltung_1 (host); +exit (0); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_clnt.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_clnt.c new file mode 100644 index 0000000..a867ddb --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_clnt.c @@ -0,0 +1,40 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include /* for memset */ +#include "telbuch.h" + +/* Default timeout can be changed using clnt_control() */ +static struct timeval TIMEOUT = { 25, 0 }; + +Ergebnis * +addentry_1(addStruct *argp, CLIENT *clnt) +{ + static Ergebnis clnt_res; + + memset((char *)&clnt_res, 0, sizeof(clnt_res)); + if (clnt_call (clnt, addEntry, + (xdrproc_t) xdr_addStruct, (caddr_t) argp, + (xdrproc_t) xdr_Ergebnis, (caddr_t) &clnt_res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&clnt_res); +} + +Ergebnis * +searchentry_1(searchStruct *argp, CLIENT *clnt) +{ + static Ergebnis clnt_res; + + memset((char *)&clnt_res, 0, sizeof(clnt_res)); + if (clnt_call (clnt, searchEntry, + (xdrproc_t) xdr_searchStruct, (caddr_t) argp, + (xdrproc_t) xdr_Ergebnis, (caddr_t) &clnt_res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&clnt_res); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_server.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_server.c new file mode 100644 index 0000000..6710998 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_server.c @@ -0,0 +1,78 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "telbuch.h" + +Ergebnis * +addentry_1_svc(addStruct *argp, struct svc_req *rqstp) +{ + static Ergebnis result; + + /* my code START */ + + FILE* out; + + if ((out = fopen("telbuch", "a")) == NULL) // Datei zum Schreiben öffnen + { + strcpy(result.Eintrag,"Oeffnen der Telefonbuchdatei fehgeschlagen"); + return &result; + } + fseek(out,0,SEEK_END); // Dateizeiger an Ende setzen + + // neuen Eintrag reinschreiben + fprintf(out, "%s %s\n", argp->Name, argp->TelNr); + + fclose(out); + + strcpy(result.Eintrag,"Eintrag erfolgreich"); + + /* my code END */ + + return &result; +} + +Ergebnis * +searchentry_1_svc(searchStruct *argp, struct svc_req *rqstp) +{ + static Ergebnis result; + + /* my code START */ + char name[41]; + char nname[20]; + char vname[20]; + char telnr[20]; + + FILE* in; + + if ((in = fopen("telbuch", "r")) == NULL) // Datei zum Lesen öffnen + { + strcpy(result.Eintrag,"Oeffnen der Telefonbuchdatei fehgeschlagen"); + return &result; + } + + while (!feof(in)) // Nach dem Eintrag suchen + { + fscanf(in, "%s %s %s", nname, vname, telnr); + strcpy(name, nname); + strcat(name, " "); + strcat(name, vname); + if (strcmp(argp->Name, name) == 0) // Eintrag gefunden + { + strcpy(result.Eintrag, "gefunden: "); + strcat(result.Eintrag, name); + strcat(result.Eintrag, " "); + strcat(result.Eintrag, telnr); + return &result; + } + } + + // soweit kommt die Funktion nur, wenn kein Eintrag gefunden wurde. + strcpy(result.Eintrag, "Eintrag nicht gefunden"); + + /* my code END */ + + return &result; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_svc.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_svc.c new file mode 100644 index 0000000..f14df2a --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_svc.c @@ -0,0 +1,98 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "telbuch.h" +#include +#include +#include +#include +#include +#include +#include + +#ifndef SIG_PF +#define SIG_PF void(*)(int) +#endif + +static void +telbuch_verwaltung_1(struct svc_req *rqstp, register SVCXPRT *transp) +{ + union { + addStruct addentry_1_arg; + searchStruct searchentry_1_arg; + } argument; + char *result; + xdrproc_t _xdr_argument, _xdr_result; + char *(*local)(char *, struct svc_req *); + + switch (rqstp->rq_proc) { + case NULLPROC: + (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); + return; + + case addEntry: + _xdr_argument = (xdrproc_t) xdr_addStruct; + _xdr_result = (xdrproc_t) xdr_Ergebnis; + local = (char *(*)(char *, struct svc_req *)) addentry_1_svc; + break; + + case searchEntry: + _xdr_argument = (xdrproc_t) xdr_searchStruct; + _xdr_result = (xdrproc_t) xdr_Ergebnis; + local = (char *(*)(char *, struct svc_req *)) searchentry_1_svc; + break; + + default: + svcerr_noproc (transp); + return; + } + memset ((char *)&argument, 0, sizeof (argument)); + if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + svcerr_decode (transp); + return; + } + result = (*local)((char *)&argument, rqstp); + if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { + svcerr_systemerr (transp); + } + if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + fprintf (stderr, "%s", "unable to free arguments"); + exit (1); + } + return; +} + +int +main (int argc, char **argv) +{ + register SVCXPRT *transp; + + pmap_unset (TELBUCH_VERWALTUNG, ONE); + + transp = svcudp_create(RPC_ANYSOCK); + if (transp == NULL) { + fprintf (stderr, "%s", "cannot create udp service."); + exit(1); + } + if (!svc_register(transp, TELBUCH_VERWALTUNG, ONE, telbuch_verwaltung_1, IPPROTO_UDP)) { + fprintf (stderr, "%s", "unable to register (TELBUCH_VERWALTUNG, ONE, udp)."); + exit(1); + } + + transp = svctcp_create(RPC_ANYSOCK, 0, 0); + if (transp == NULL) { + fprintf (stderr, "%s", "cannot create tcp service."); + exit(1); + } + if (!svc_register(transp, TELBUCH_VERWALTUNG, ONE, telbuch_verwaltung_1, IPPROTO_TCP)) { + fprintf (stderr, "%s", "unable to register (TELBUCH_VERWALTUNG, ONE, tcp)."); + exit(1); + } + + svc_run (); + fprintf (stderr, "%s", "svc_run returned"); + exit (1); + /* NOTREACHED */ +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_xdr.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_xdr.c new file mode 100644 index 0000000..89ea2ad --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung/telbuch_xdr.c @@ -0,0 +1,45 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "telbuch.h" + +bool_t +xdr_addStruct (XDR *xdrs, addStruct *objp) +{ + register int32_t *buf; + + int i; + if (!xdr_vector (xdrs, (char *)objp->Name, 45, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + if (!xdr_vector (xdrs, (char *)objp->TelNr, 45, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + return TRUE; +} + +bool_t +xdr_searchStruct (XDR *xdrs, searchStruct *objp) +{ + register int32_t *buf; + + int i; + if (!xdr_vector (xdrs, (char *)objp->Name, 45, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + return TRUE; +} + +bool_t +xdr_Ergebnis (XDR *xdrs, Ergebnis *objp) +{ + register int32_t *buf; + + int i; + if (!xdr_vector (xdrs, (char *)objp->Eintrag, 80, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + return TRUE; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere new file mode 100644 index 0000000..6d59a66 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere @@ -0,0 +1,45 @@ + +# This is a template Makefile generated by rpcgen + +# Parameters + +CLIENT = addiere_client +SERVER = addiere_server + +SOURCES_CLNT.c = +SOURCES_CLNT.h = +SOURCES_SVC.c = +SOURCES_SVC.h = +SOURCES.x = addiere.x + +TARGETS_SVC.c = addiere_svc.c addiere_server.c addiere_xdr.c +TARGETS_CLNT.c = addiere_clnt.c addiere_client.c addiere_xdr.c +TARGETS = addiere.h addiere_xdr.c addiere_clnt.c addiere_svc.c addiere_client.c addiere_server.c + +OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o) +OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o) +# Compiler flags + +CFLAGS += -g +RPCGENFLAGS = + +# Targets + +all : $(CLIENT) $(SERVER) + +$(TARGETS) : $(SOURCES.x) + rpcgen $(RPCGENFLAGS) $(SOURCES.x) + +$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c) + +$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c) + +$(CLIENT) : $(OBJECTS_CLNT) + $(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS) + +$(SERVER) : $(OBJECTS_SVC) + $(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS) + + clean: + $(RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER) + diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook new file mode 100644 index 0000000..92ff3a1 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook @@ -0,0 +1,46 @@ + +# This is a template Makefile generated by rpcgen + +# Parameters + +CLIENT = phonebook_client +SERVER = phonebook_server + +SOURCES_CLNT.c = +SOURCES_CLNT.h = +SOURCES_SVC.c = +SOURCES_SVC.h = +SOURCES.x = phonebook.x + +TARGETS_SVC.c = phonebook_svc.c phonebook_server.c phonebook_xdr.c +TARGETS_CLNT.c = phonebook_clnt.c phonebook_client.c phonebook_xdr.c +TARGETS = phonebook.h phonebook_xdr.c phonebook_clnt.c phonebook_svc.c phonebook_client.c phonebook_server.c + +OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o) +OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o) +# Compiler flags + +CFLAGS += -g +LDLIBS += -lnsl +RPCGENFLAGS = + +# Targets + +all : $(CLIENT) $(SERVER) + +$(TARGETS) : $(SOURCES.x) + rpcgen $(RPCGENFLAGS) $(SOURCES.x) + +$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c) + +$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c) + +$(CLIENT) : $(OBJECTS_CLNT) + $(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS) + +$(SERVER) : $(OBJECTS_SVC) + $(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS) + + clean: + $(RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER) + diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h new file mode 100644 index 0000000..7e77cb2 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h @@ -0,0 +1,53 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#ifndef _ADDIERE_H_RPCGEN +#define _ADDIERE_H_RPCGEN + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +struct add_struct { + int p1; + int p2; +}; +typedef struct add_struct add_struct; + +#define ADDIERE_TEST 1234567 +#define ONE 1 + +#if defined(__STDC__) || defined(__cplusplus) +#define addiere 1 +extern int * addiere_1(add_struct *, CLIENT *); +extern int * addiere_1_svc(add_struct *, struct svc_req *); +extern int addiere_test_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); + +#else /* K&R C */ +#define addiere 1 +extern int * addiere_1(); +extern int * addiere_1_svc(); +extern int addiere_test_1_freeresult (); +#endif /* K&R C */ + +/* the xdr functions */ + +#if defined(__STDC__) || defined(__cplusplus) +extern bool_t xdr_add_struct (XDR *, add_struct*); + +#else /* K&R C */ +extern bool_t xdr_add_struct (); + +#endif /* K&R C */ + +#ifdef __cplusplus +} +#endif + +#endif /* !_ADDIERE_H_RPCGEN */ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client new file mode 100644 index 0000000..dced221 Binary files /dev/null and b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client differ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c new file mode 100644 index 0000000..e6b9887 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c @@ -0,0 +1,58 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "addiere.h" + + +void +addiere_test_1(char *host) +{ + CLIENT *clnt; + int *result_1; + add_struct addiere_1_arg; + +#ifndef DEBUG + clnt = clnt_create (host, ADDIERE_TEST, ONE, "udp"); + if (clnt == NULL) { + clnt_pcreateerror (host); + exit (1); + } +#endif /* DEBUG */ + + /* my code START */ + addiere_1_arg.p1 = 5; + addiere_1_arg.p2 = 6; + /* my code END */ + + result_1 = addiere_1(&addiere_1_arg, clnt); + if (result_1 == (int *) NULL) { + clnt_perror (clnt, "call failed"); + } + /* my code START */ + else { + printf("addiere(5,6) liefert %d\n", *result_1); + } + /* my code END */ + +#ifndef DEBUG + clnt_destroy (clnt); +#endif /* DEBUG */ +} + + +int +main (int argc, char *argv[]) +{ + char *host; + + if (argc < 2) { + printf ("usage: %s server_host\n", argv[0]); + exit (1); + } + host = argv[1]; + addiere_test_1 (host); +exit (0); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung new file mode 100644 index 0000000..e6b9887 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung @@ -0,0 +1,58 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "addiere.h" + + +void +addiere_test_1(char *host) +{ + CLIENT *clnt; + int *result_1; + add_struct addiere_1_arg; + +#ifndef DEBUG + clnt = clnt_create (host, ADDIERE_TEST, ONE, "udp"); + if (clnt == NULL) { + clnt_pcreateerror (host); + exit (1); + } +#endif /* DEBUG */ + + /* my code START */ + addiere_1_arg.p1 = 5; + addiere_1_arg.p2 = 6; + /* my code END */ + + result_1 = addiere_1(&addiere_1_arg, clnt); + if (result_1 == (int *) NULL) { + clnt_perror (clnt, "call failed"); + } + /* my code START */ + else { + printf("addiere(5,6) liefert %d\n", *result_1); + } + /* my code END */ + +#ifndef DEBUG + clnt_destroy (clnt); +#endif /* DEBUG */ +} + + +int +main (int argc, char *argv[]) +{ + char *host; + + if (argc < 2) { + printf ("usage: %s server_host\n", argv[0]); + exit (1); + } + host = argv[1]; + addiere_test_1 (host); +exit (0); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c new file mode 100644 index 0000000..28eceba --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c @@ -0,0 +1,25 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include /* for memset */ +#include "addiere.h" + +/* Default timeout can be changed using clnt_control() */ +static struct timeval TIMEOUT = { 25, 0 }; + +int * +addiere_1(add_struct *argp, CLIENT *clnt) +{ + static int clnt_res; + + memset((char *)&clnt_res, 0, sizeof(clnt_res)); + if (clnt_call (clnt, addiere, + (xdrproc_t) xdr_add_struct, (caddr_t) argp, + (xdrproc_t) xdr_int, (caddr_t) &clnt_res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&clnt_res); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server new file mode 100644 index 0000000..a59130e Binary files /dev/null and b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server differ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c new file mode 100644 index 0000000..3f8bb84 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c @@ -0,0 +1,23 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "addiere.h" + +int * +addiere_1_svc(add_struct *argp, struct svc_req *rqstp) +{ + static int result; + + /* + * insert server code here + */ + + /* my Code START */ + result = argp->p1 + argp->p2; + /* my Code END */ + + return &result; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung new file mode 100644 index 0000000..3f8bb84 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung @@ -0,0 +1,23 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "addiere.h" + +int * +addiere_1_svc(add_struct *argp, struct svc_req *rqstp) +{ + static int result; + + /* + * insert server code here + */ + + /* my Code START */ + result = argp->p1 + argp->p2; + /* my Code END */ + + return &result; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c new file mode 100644 index 0000000..fb9e617 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c @@ -0,0 +1,91 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "addiere.h" +#include +#include +#include +#include +#include +#include +#include + +#ifndef SIG_PF +#define SIG_PF void(*)(int) +#endif + +static void +addiere_test_1(struct svc_req *rqstp, register SVCXPRT *transp) +{ + union { + add_struct addiere_1_arg; + } argument; + char *result; + xdrproc_t _xdr_argument, _xdr_result; + char *(*local)(char *, struct svc_req *); + + switch (rqstp->rq_proc) { + case NULLPROC: + (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); + return; + + case addiere: + _xdr_argument = (xdrproc_t) xdr_add_struct; + _xdr_result = (xdrproc_t) xdr_int; + local = (char *(*)(char *, struct svc_req *)) addiere_1_svc; + break; + + default: + svcerr_noproc (transp); + return; + } + memset ((char *)&argument, 0, sizeof (argument)); + if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + svcerr_decode (transp); + return; + } + result = (*local)((char *)&argument, rqstp); + if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { + svcerr_systemerr (transp); + } + if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + fprintf (stderr, "%s", "unable to free arguments"); + exit (1); + } + return; +} + +int +main (int argc, char **argv) +{ + register SVCXPRT *transp; + + pmap_unset (ADDIERE_TEST, ONE); + + transp = svcudp_create(RPC_ANYSOCK); + if (transp == NULL) { + fprintf (stderr, "%s", "cannot create udp service."); + exit(1); + } + if (!svc_register(transp, ADDIERE_TEST, ONE, addiere_test_1, IPPROTO_UDP)) { + fprintf (stderr, "%s", "unable to register (ADDIERE_TEST, ONE, udp)."); + exit(1); + } + + transp = svctcp_create(RPC_ANYSOCK, 0, 0); + if (transp == NULL) { + fprintf (stderr, "%s", "cannot create tcp service."); + exit(1); + } + if (!svc_register(transp, ADDIERE_TEST, ONE, addiere_test_1, IPPROTO_TCP)) { + fprintf (stderr, "%s", "unable to register (ADDIERE_TEST, ONE, tcp)."); + exit(1); + } + + svc_run (); + fprintf (stderr, "%s", "svc_run returned"); + exit (1); + /* NOTREACHED */ +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c new file mode 100644 index 0000000..5067fb5 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c @@ -0,0 +1,18 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "addiere.h" + +bool_t +xdr_add_struct (XDR *xdrs, add_struct *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->p1)) + return FALSE; + if (!xdr_int (xdrs, &objp->p2)) + return FALSE; + return TRUE; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat new file mode 100644 index 0000000..9fca083 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat @@ -0,0 +1,4 @@ +ff;44 +dd;33 +rr;66 +tt;55 diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h new file mode 100644 index 0000000..9153c8b --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h @@ -0,0 +1,73 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#ifndef _PHONEBOOK_H_RPCGEN +#define _PHONEBOOK_H_RPCGEN + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +struct str_name { + char name[50]; +}; +typedef struct str_name str_name; + +struct str_number { + char number[20]; +}; +typedef struct str_number str_number; + +struct phonebookEntry { + char name[50]; + char number[20]; +}; +typedef struct phonebookEntry phonebookEntry; + +#define Phonebook 1234567 +#define ONE 1 + +#if defined(__STDC__) || defined(__cplusplus) +#define add 1 +extern int * add_1(phonebookEntry *, CLIENT *); +extern int * add_1_svc(phonebookEntry *, struct svc_req *); +#define search 2 +extern str_number * search_1(str_name *, CLIENT *); +extern str_number * search_1_svc(str_name *, struct svc_req *); +extern int phonebook_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); + +#else /* K&R C */ +#define add 1 +extern int * add_1(); +extern int * add_1_svc(); +#define search 2 +extern str_number * search_1(); +extern str_number * search_1_svc(); +extern int phonebook_1_freeresult (); +#endif /* K&R C */ + +/* the xdr functions */ + +#if defined(__STDC__) || defined(__cplusplus) +extern bool_t xdr_str_name (XDR *, str_name*); +extern bool_t xdr_str_number (XDR *, str_number*); +extern bool_t xdr_phonebookEntry (XDR *, phonebookEntry*); + +#else /* K&R C */ +extern bool_t xdr_str_name (); +extern bool_t xdr_str_number (); +extern bool_t xdr_phonebookEntry (); + +#endif /* K&R C */ + +#ifdef __cplusplus +} +#endif + +#endif /* !_PHONEBOOK_H_RPCGEN */ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x new file mode 100644 index 0000000..76dc799 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x @@ -0,0 +1,20 @@ +struct str_name { + char name[50]; +}; + +struct str_number { + char number[20]; +}; + +struct phonebookEntry { + char name[50]; + char number[20]; +}; + + +program Phonebook { + version ONE { + int add(phonebookEntry pb) = 1; + str_number search(str_name toSearch) = 2; + } = 1; +} = 1234567; diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client new file mode 100644 index 0000000..a4e8efb Binary files /dev/null and b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client differ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c new file mode 100644 index 0000000..d78675c --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c @@ -0,0 +1,79 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "phonebook.h" +#include + +void +phonebook_1(char *host) +{ + CLIENT *clnt; + int *result_1; + int input; + phonebookEntry add_1_arg; + str_number *result_2; + str_name search_1_arg; + +#ifndef DEBUG + clnt = clnt_create (host, Phonebook, ONE, "udp"); + if (clnt == NULL) { + clnt_pcreateerror (host); + exit (1); + } +#endif /* DEBUG */ + do + { + printf("1 add entry\n"); + printf("2 search entry\n"); + printf("0 exit\n"); + scanf("%d",&input); + switch(input) + { + case 1: { + printf("Add Entry\n"); + printf("Please enter name: "); + scanf("%s",&add_1_arg.name); + printf("Please enter number: "); + scanf("%s",&add_1_arg.number); + result_1 = add_1(&add_1_arg, clnt); + if (result_1 == (int *) NULL) { + clnt_perror (clnt, "call failed"); + } + break; + } + case 2: { + printf("Search Entry\n"); + printf("Enter name to search: "); + scanf("%s",&search_1_arg.name); + result_2 = search_1(&search_1_arg, clnt); + printf("Found: %s\n", result_2->number); + if (result_2 == (str_number *) NULL) { + clnt_perror (clnt, "call failed"); + } + break; + } + default: break; + } + } while (input != 0); +#ifndef DEBUG + clnt_destroy (clnt); +#endif /* DEBUG */ +} + + +int +main (int argc, char *argv[]) +{ + char *host; + + if (argc < 2) { + printf ("usage: %s server_host\n", argv[0]); + exit (1); + } + host = argv[1]; + phonebook_1 (host); +exit (0); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c new file mode 100644 index 0000000..e80fc05 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c @@ -0,0 +1,40 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include /* for memset */ +#include "phonebook.h" + +/* Default timeout can be changed using clnt_control() */ +static struct timeval TIMEOUT = { 25, 0 }; + +int * +add_1(phonebookEntry *argp, CLIENT *clnt) +{ + static int clnt_res; + + memset((char *)&clnt_res, 0, sizeof(clnt_res)); + if (clnt_call (clnt, add, + (xdrproc_t) xdr_phonebookEntry, (caddr_t) argp, + (xdrproc_t) xdr_int, (caddr_t) &clnt_res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&clnt_res); +} + +str_number * +search_1(str_name *argp, CLIENT *clnt) +{ + static str_number clnt_res; + + memset((char *)&clnt_res, 0, sizeof(clnt_res)); + if (clnt_call (clnt, search, + (xdrproc_t) xdr_str_name, (caddr_t) argp, + (xdrproc_t) xdr_str_number, (caddr_t) &clnt_res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&clnt_res); +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server new file mode 100644 index 0000000..7835d1d Binary files /dev/null and b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server differ diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c new file mode 100644 index 0000000..de673e0 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c @@ -0,0 +1,84 @@ +/* + * This is sample code generated by rpcgen. + * These are only templates and you can use them + * as a guideline for developing your own functions. + */ + +#include "phonebook.h" +#include +#include + +//phonebookEntry myphonebook[50]; +//int i=0; + +int * +add_1_svc(phonebookEntry *argp, struct svc_req *rqstp) +{ + static int result; + + /* + * insert server code here + */ + FILE* fp; + fp=fopen("phonebook.dat","a+"); + /*strcat(myphonebook[i].name,argp->name); + strcat(myphonebook[i].name,"\0"); + strcat(myphonebook[i].number,argp->number); + strcat(myphonebook[i].number,"\0");*/ + fprintf(fp,"%s;%s\n",argp->name,argp->number); + printf("%s;%s\n",argp->name,argp->number); + //printf("Added: %s %s\n",myphonebook[i].name,myphonebook[i].number); + //i++; + fclose(fp); + return &result; +} + +str_number * +search_1_svc(str_name *argp, struct svc_req *rqstp) +{ + static str_number result; + static str_name aktName; + static str_number aktNumber; + char temp[80]; + int n=0; + /* + * insert server code here + */ + strcat(result.number,"-1"); + printf("search string: %s\n",argp->name); + /*for (n=0;nname,myphonebook[n].name) == 0) + { + strcpy(result.number,myphonebook[n].number); + break; + } + }*/ + FILE *fp; + fp=fopen("phonebook.dat","r"); + while(!feof(fp)) + { + strcpy(temp,"\0"); + strcpy(aktName.name,"\0"); + strcpy(aktNumber.number,"\0"); + fscanf(fp,"%s",&temp); + printf("Read from file: %s ",temp); + strcat(aktName.name,strtok(temp,";")); + strcat(aktName.name,"\0"); + strcat(aktNumber.number,strtok(NULL,";")); + strcat(aktNumber.number,"\0"); + //printf("actual entry: %s\n",myphonebook[n].name); + printf("actual entry: %s %s\n",aktName.name,aktNumber.number); + if(strcmp(aktName.name,argp->name) == 0) + { + strcpy(result.number,aktNumber.number); + fclose(fp); + return &result; + } + } + strcpy(result.number,"-1"); + fclose(fp); + + return &result; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c new file mode 100644 index 0000000..0af71dd --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c @@ -0,0 +1,98 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "phonebook.h" +#include +#include +#include +#include +#include +#include +#include + +#ifndef SIG_PF +#define SIG_PF void(*)(int) +#endif + +static void +phonebook_1(struct svc_req *rqstp, register SVCXPRT *transp) +{ + union { + phonebookEntry add_1_arg; + str_name search_1_arg; + } argument; + char *result; + xdrproc_t _xdr_argument, _xdr_result; + char *(*local)(char *, struct svc_req *); + + switch (rqstp->rq_proc) { + case NULLPROC: + (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); + return; + + case add: + _xdr_argument = (xdrproc_t) xdr_phonebookEntry; + _xdr_result = (xdrproc_t) xdr_int; + local = (char *(*)(char *, struct svc_req *)) add_1_svc; + break; + + case search: + _xdr_argument = (xdrproc_t) xdr_str_name; + _xdr_result = (xdrproc_t) xdr_str_number; + local = (char *(*)(char *, struct svc_req *)) search_1_svc; + break; + + default: + svcerr_noproc (transp); + return; + } + memset ((char *)&argument, 0, sizeof (argument)); + if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + svcerr_decode (transp); + return; + } + result = (*local)((char *)&argument, rqstp); + if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { + svcerr_systemerr (transp); + } + if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + fprintf (stderr, "%s", "unable to free arguments"); + exit (1); + } + return; +} + +int +main (int argc, char **argv) +{ + register SVCXPRT *transp; + + pmap_unset (Phonebook, ONE); + + transp = svcudp_create(RPC_ANYSOCK); + if (transp == NULL) { + fprintf (stderr, "%s", "cannot create udp service."); + exit(1); + } + if (!svc_register(transp, Phonebook, ONE, phonebook_1, IPPROTO_UDP)) { + fprintf (stderr, "%s", "unable to register (Phonebook, ONE, udp)."); + exit(1); + } + + transp = svctcp_create(RPC_ANYSOCK, 0, 0); + if (transp == NULL) { + fprintf (stderr, "%s", "cannot create tcp service."); + exit(1); + } + if (!svc_register(transp, Phonebook, ONE, phonebook_1, IPPROTO_TCP)) { + fprintf (stderr, "%s", "unable to register (Phonebook, ONE, tcp)."); + exit(1); + } + + svc_run (); + fprintf (stderr, "%s", "svc_run returned"); + exit (1); + /* NOTREACHED */ +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c new file mode 100644 index 0000000..19ce904 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c @@ -0,0 +1,45 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "phonebook.h" + +bool_t +xdr_str_name (XDR *xdrs, str_name *objp) +{ + register int32_t *buf; + + int i; + if (!xdr_vector (xdrs, (char *)objp->name, 50, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + return TRUE; +} + +bool_t +xdr_str_number (XDR *xdrs, str_number *objp) +{ + register int32_t *buf; + + int i; + if (!xdr_vector (xdrs, (char *)objp->number, 20, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + return TRUE; +} + +bool_t +xdr_phonebookEntry (XDR *xdrs, phonebookEntry *objp) +{ + register int32_t *buf; + + int i; + if (!xdr_vector (xdrs, (char *)objp->name, 50, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + if (!xdr_vector (xdrs, (char *)objp->number, 20, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; + return TRUE; +} diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme new file mode 100644 index 0000000..8331f10 --- /dev/null +++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme @@ -0,0 +1,75 @@ +1. Zunaechst werde aus dem IDL Interface addiere.x mit dem PRC Compiler die Rumpsdateien erzeugt. + $ ls -al + $ ls -al + drwxrwxr-x 2 as users 4096 Jan 29 11:47 . + drwxrwxr-x 4 as users 4096 Jan 29 11:45 .. + -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x + $ + $ ppcgen -a addiere.x + $ rpcgen -a addiere.x + $ ll + insgesamt 48 + -rw-rw-r-- 1 as users 784 Jan 29 11:50 addiere_client.c + -rw-rw-r-- 1 as users 551 Jan 29 11:50 addiere_clnt.c + -rw-rw-r-- 1 as users 973 Jan 29 11:50 addiere.h + -rw-rw-r-- 1 as users 318 Jan 29 11:50 addiere_server.c + -rw-rw-r-- 1 as users 2111 Jan 29 11:50 addiere_svc.c + -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x + -rw-rw-r-- 1 as users 294 Jan 29 11:50 addiere_xdr.c + -rw-rw-r-- 1 as users 1118 Jan 29 11:50 Makefile.addiere + $ + +2. Nun ist die Aenderung am Client- und am Server-Programm durchzufuehren: + $ vi addiere_client.c + ... + $ + $ vi addiere_client.c + ... + $ + Beispiele sind "addiere_client.c_NACH_Ergaenzung" und "addiere_client.c_VOR_Ergaenzung" + +3. Nun ist alles mit dem erzeugten Makefile zu generieren. Jeweils auf Server und Client-Rechner. + $ make -f Makefile.addiere + $ make -f Makefile.addiere + cc -g -c -o addiere_clnt.o addiere_clnt.c + cc -g -c -o addiere_client.o addiere_client.c + cc -g -c -o addiere_xdr.o addiere_xdr.c + cc -g -o addiere_client addiere_clnt.o addiere_client.o addiere_xdr.o -lnsl + cc -g -c -o addiere_svc.o addiere_svc.c + cc -g -c -o addiere_server.o addiere_server.c + cc -g -o addiere_server addiere_svc.o addiere_server.o addiere_xdr.o -lnsl + $ + $ ls -l + insgesamt 280 + -rwxrwxr-x 1 as users 42669 Jan 29 11:55 addiere_client + -rw-rw-r-- 1 as users 784 Jan 29 11:50 addiere_client.c + -rw-rw-r-- 1 as users 28228 Jan 29 11:55 addiere_client.o + -rw-rw-r-- 1 as users 551 Jan 29 11:50 addiere_clnt.c + -rw-rw-r-- 1 as users 27728 Jan 29 11:55 addiere_clnt.o + -rw-rw-r-- 1 as users 973 Jan 29 11:50 addiere.h + -rwxrwxr-x 1 as users 44808 Jan 29 11:55 addiere_server + -rw-rw-r-- 1 as users 318 Jan 29 11:50 addiere_server.c + -rw-rw-r-- 1 as users 27288 Jan 29 11:55 addiere_server.o + -rw-rw-r-- 1 as users 2111 Jan 29 11:50 addiere_svc.c + -rw-rw-r-- 1 as users 30480 Jan 29 11:55 addiere_svc.o + -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x + -rw-rw-r-- 1 as users 294 Jan 29 11:50 addiere_xdr.c + -rw-rw-r-- 1 as users 27380 Jan 29 11:55 addiere_xdr.o + -rw-rw-r-- 1 as users 1118 Jan 29 11:50 Makefile.addiere + $ + +4. Fertig - nun kann der Server gestartet werden und Clients können Anfragen stellen: + Server (linux): + $ addiere_server & + [2] 2672 + $ ps + PID TTY TIME CMD + 27586 pts/5 00:00:00 bash + 2672 pts/1 00:00:00 addiere_server + 2673 pts/1 00:00:00 ps + $ + + Client: + $ addiere_client linux + addiere(5,6) liefert 11 + $ -- cgit v1.2.3