Implémentation du RPC coté serveur
This commit is contained in:
parent
fa6265f3d0
commit
4b8ae83e1f
|
@ -0,0 +1,84 @@
|
|||
#include "server.h"
|
||||
|
||||
void traiterClient(int socket){
|
||||
|
||||
requete req;
|
||||
int nb_octet;
|
||||
int fini=0;
|
||||
|
||||
while(!fini){
|
||||
|
||||
nb_octet = read(socket,&req,sizeof(req));
|
||||
IF_NB_OCTET_BREAK
|
||||
|
||||
switch(req.type){
|
||||
|
||||
case FIN:
|
||||
{
|
||||
fini = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case FACTO:
|
||||
{
|
||||
|
||||
int nb;
|
||||
long res;
|
||||
|
||||
nb_octet = read(socket, &nb, sizeof(int));
|
||||
IF_NB_OCTET_BREAK
|
||||
|
||||
res = factoriel(nb);
|
||||
nb_octet = write(socket, &res, sizeof(res));
|
||||
IF_NB_OCTET_BREAK
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case POW:
|
||||
{
|
||||
int a,b;
|
||||
long res;
|
||||
|
||||
nb_octet = read(socket, &a, sizeof(int));
|
||||
IF_NB_OCTET_BREAK
|
||||
|
||||
nb_octet = read(socket, &b, sizeof(int));
|
||||
IF_NB_OCTET_BREAK
|
||||
|
||||
res = puissance(a,b);
|
||||
nb_octet = write(socket, &res, sizeof(res));
|
||||
IF_NB_OCTET_BREAK
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case ANALYSE:
|
||||
{
|
||||
int nb_elem, attendu;
|
||||
int* donnees;
|
||||
char message[MAX_BUFFER_LENGTH];
|
||||
res_analyse_donnees res;
|
||||
|
||||
nb_elem = req.taille/sizeof(int);
|
||||
donnees = (int*) malloc(nb_elem*sizeof(int));
|
||||
attendu = req.taille;
|
||||
|
||||
while(attendu > 0){
|
||||
nb_octet = read(socket, message, MAX_BUFFER_LENGTH);
|
||||
IF_NB_OCTET_BREAK
|
||||
memcpy(donnees+(req.taille - attendu), message,nb_octet);
|
||||
attendu -= nb_octet;
|
||||
}
|
||||
|
||||
analyse(donnees,nb_elem,&res);
|
||||
write(socket, &res, sizeof(res));
|
||||
free (donnees);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef _RPCSERVER_H_
|
||||
|
||||
#define _RPCSERVER_H_
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "../calculs.h"
|
||||
#include "../lib.h"
|
||||
|
||||
#define IF_NB_OCTET_BREAK if(nb_octet == -1){fini = 1; break;}
|
||||
#define MAX_BUFFER_LENGTH 200
|
||||
|
||||
void traiterClient(int socket);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,41 @@
|
|||
#include "calculs.h"
|
||||
|
||||
long factoriel(int nb)
|
||||
{
|
||||
int i;
|
||||
long res;
|
||||
res = 1;
|
||||
for (i=nb;i>1;i--)
|
||||
res = res * i;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
void analyser_donnees(int donnees[], int taille, res_analyse_donnees *res)
|
||||
{
|
||||
int i;
|
||||
long somme;
|
||||
|
||||
res -> min = donnees[0];
|
||||
res -> max = donnees[0];
|
||||
somme = donnees[0];
|
||||
|
||||
for (i=1; i < taille; i++)
|
||||
{
|
||||
if (donnees[i] > res -> max) res -> max = donnees[i];
|
||||
if (donnees[i] < res -> min) res -> min = donnees[i];
|
||||
somme += donnees[i];
|
||||
}
|
||||
res -> moy = ((float)somme) / taille;
|
||||
}
|
||||
|
||||
long puissance(int nb, int puiss)
|
||||
{
|
||||
long res = nb;
|
||||
int i;
|
||||
for (i=1; i < puiss; i++)
|
||||
res = res * nb;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef _CALCULS_H_
|
||||
|
||||
typedef struct {
|
||||
float moy;
|
||||
int max;
|
||||
int min;
|
||||
}res_analyse_donnees;
|
||||
|
||||
long factoriel(int nb);
|
||||
|
||||
void analyser_donnees(int donnees[], int taille, res_analyse_donnees *res);
|
||||
|
||||
long puissance(int nb, int puiss);
|
||||
|
||||
#endif
|
19
lib.h
19
lib.h
|
@ -37,4 +37,23 @@
|
|||
|
||||
int xread(const int xsocket, char* buffer, int bufsize);
|
||||
int xwrite(const int xsocket, char* buffer);
|
||||
|
||||
|
||||
/************************************************
|
||||
**** Structs ****
|
||||
************************************************/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FIN=0,
|
||||
FACTO=1,
|
||||
POW=2,
|
||||
ANALYSE=3
|
||||
}requete_t;
|
||||
|
||||
typedef struct {
|
||||
requete_t type;
|
||||
int taille;
|
||||
}requete;
|
||||
|
||||
#endif
|
||||
|
|
9
makefile
9
makefile
|
@ -10,12 +10,17 @@ server.o: lib.h server.h server.c
|
|||
lib.o: lib.h lib.c
|
||||
gcc $(CC) -c -o lib.o lib.c
|
||||
|
||||
server: lib.o server.o
|
||||
gcc $(CC) -o server lib.o server.o
|
||||
server: lib.o server.o serverRPC.o
|
||||
gcc $(CC) -o server lib.o server.o serverRPC.o
|
||||
|
||||
client: lib.o client.o
|
||||
gcc $(CC) -o client lib.o client.o
|
||||
|
||||
clientRPC.o: calculs.h RPC/client.c
|
||||
gcc $(CC) -c -o clientRPC.o RPC/client.c
|
||||
|
||||
serverRPC.o: RPC/server.c RPC/server.h calculs.h
|
||||
gcc $(CC) -c -o serverRPC.o RPC/server.c
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue