#1 Le 26/11/2006, à 16:50
- shensi
[RESOLU] Requête rpc: Programme en C : d'où vient l'erreur?
Salut à tous !
Je suis en train de tester un programme Client/serveur en C utilisant les librairies :
#include<rpc/types.h>
#include<rpc/xdr.h>
voila ca que me dit ma ubuntu 6.10 lorsque j'exécute mon programme:
root@shadow:/mnt/data/cours/sr/tp1_rpc_complexe# ls
client client.c client.c~ head.c head.h serveur serveur.c
root@shadow:/mnt/data/cours/sr/tp1_rpc_complexe# cc serveur.c head.c -o serveur
serveur.c: In function ‘Mul’:
serveur.c:37: warning: return from incompatible pointer type
head.c: In function ‘xdr_couple’:
head.c:13: warning: passing argument 2 of ‘xdr_float’ from incompatible pointer type
head.c:13: warning: passing argument 2 of ‘xdr_float’ from incompatible pointer type
root@shadow:/mnt/data/cours/sr/tp1_rpc_complexe# ./serveur
Cannot register service: RPC: Unable to receive; errno = Connection refused
couldn't register prog 1 vers 1
Alors ??
Merci d'avance
Dernière modification par shensi (Le 28/11/2006, à 02:24)
Distrib: Ubuntu 9.04
Citation : Si chuck Norris te dit que ta mère est bonne... tu peux l'appeler Papa
Hors ligne
#2 Le 26/11/2006, à 22:04
- shensi
Re : [RESOLU] Requête rpc: Programme en C : d'où vient l'erreur?
je crois qu'en vous montrant mon code vous comprendrez mieux ...
// head.h
#include<rpc/types.h>
#include<rpc/xdr.h>
#define PROG 1
#define VERSION 1
typedef struct chaine{
char *ch1;
char *ch2;
}chaine;
int xdr_chaine(XDR *xdrp, chaine *c);
// head.c
#include "head.h"
int xdr_chaine(XDR *xdrp, chaine *c){
return( xdr_wrapstring(xdrp, &c->ch1) && xdr_wrapstring(xdrp, &c->ch2) );
}
// serveur.c
#include "head.h"
#include <string.h>
int *Longueur(chaine *data){
static int res;
res = strlen(data->ch1);
return (&res);
}
char **Concatenation(chaine *data){
static char *chaine;
chaine = (char*)malloc (sizeof(char)* strlen(data->ch1)+strlen(data->ch2) );
strcpy(chaine, data->ch1);
strcpy(chaine, data->ch2);
return (&chaine);
}
main(){
registerrpc(1, 1, 1, Longueur, xdr_chaine, xdr_int);
registerrpc(1, 1, 2, Concatenation, xdr_chaine, xdr_string);
svc_run();
}
// client.c
#include "head.h"
#include <stdio.h>
#include <string.h>
void usage (char *name){
printf("Programme client/serveur --> Traitement sur des chaines de caractères\n");
printf("usage: %s <chaine> <chaine>\n", name);
}
int main(int argc, char **argv){
if(argc =! 2){
usage(argv[0]);
return 1;
}
chaine data;
int longueur;
char *chaine;
strcpy(data.ch1, argv[1]);
strcpy(data.ch2, argv[2]);
// Pour la concaténation on doit à priori faire un malloc avant d'envoyer les 2 chaines à concaténer
chaine = (char*)malloc(sizeof(char)* (strlen(data.ch1)+strlen(data.ch2)+1) );
// Appel de la fonction sur la longueur d'une chaine
callrpc("localhost",PROG, VERSION, 1, xdr_chaine, &data, xdr_int, &longueur);
// Appel de la fonction sur la concaténation de 2 chaines
callrpc("localhost",PROG, VERSION, 2, xdr_chaine, &data, xdr_wrapstring, &chaine);
// Affichage
printf("La longueur de la chaine est : %d ", &longueur);
printf("La concaténation des 2 chaines donne : %s ", &chaine);
return 0;
}
// Voici la phase de compilation du client ce que je comprends pas trop...:
...$ cc client.c head.c -o client
...$ ./client
Erreur de segmentation (core dumped)
// Voici la phase de compilation du serveur ce que je comprends encore moins...:
...$ cc serveur.c head.c -o serveur
...$ ./serveur
Cannot register service: RPC: Unable to receive; errno = Connection refused
couldn't register prog 1 vers 1
Cannot register service: RPC: Unable to receive; errno = Connection refused
couldn't register prog 1 vers 1
Dernière modification par shensi (Le 26/11/2006, à 22:08)
Distrib: Ubuntu 9.04
Citation : Si chuck Norris te dit que ta mère est bonne... tu peux l'appeler Papa
Hors ligne
#3 Le 28/11/2006, à 02:24
- shensi
Re : [RESOLU] Requête rpc: Programme en C : d'où vient l'erreur?
Bon pour info j'ai trouvé et je poste quand même la réponse
#include<rpc/types.h>
#include<rpc/xdr.h>
il faut juste install portmap
bisou et ailloli !
Distrib: Ubuntu 9.04
Citation : Si chuck Norris te dit que ta mère est bonne... tu peux l'appeler Papa
Hors ligne
#4 Le 04/12/2006, à 16:21
- GuiGeek
Re : [RESOLU] Requête rpc: Programme en C : d'où vient l'erreur?
Salut,
je viens de regarder ton code et de le tester un peu mais il plante.
Tu as vraisemblablement oublié de faire des malloc avant le strcpy dans le client
voila a bientot
GuiGui
#5 Le 04/12/2006, à 16:50
- GuiGeek
Re : [RESOLU] Requête rpc: Programme en C : d'où vient l'erreur?
re
en fait en regardant mieux t'es sur qu'il marche ce code ?
tu concatène avec des strcpy je pense que strcat serait plus adapté ...
enfin bon ... si tu as besoin d'un code qui marche correctement j'ai corrigé ...
++
GuiGui