Erreur de segmentation dans une application RPC (Remote Procedure Call)
Bonjour,
Je développe une application client-serveur simulant la gestion d'un compte bancaire. J'utilise RPC (Remote Procedure Call). Après avoir lancé mes programmes client et serveur sur deux machines, je reçois tout le temps un message:
Citation:
Segmentation fault (core dumped)
Afin d'apporter plus de précision voici la partie de mon code qui, lorsque je l'ajoute, provoque cette erreur de segmentation:
Côté client: (ce code fait appel au serveur pour récupérer les informations d'un compte client)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
Client_account *get_balance(int clnt_id)
{
CLIENT *clnt;
Client_account *result_1;
#ifndef DEBUG
clnt = clnt_create(primary_server, RBSPROG, RBSVER, "netpath");
if (clnt == NULL) {
clnt_pcreateerror(primary_server);
return 0;
}
#endif
result_1 = get_balance_1(clnt_id,clnt);
if (result_1 == NULL) {
clnt_perror(clnt, "call failed");
#ifndef DEBUG
clnt_destroy(clnt);
#endif
return 0;
}
clnt_destroy(clnt);
return result_1;
} |
Côté Serveur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
Client_account *get_balance_1_svc(clnt_id, rqstp)
int clnt_id;
struct svc_req *rqstp;
{
int max_data = 0;
static Client_account account;
FILE *fp;
fp = fopen(DB_FILE,"rb");
memset(&account,0,sizeof(Client_account));
if (clnt_id <= 0)
{
return NULL;
}
fseek(fp,0,SEEK_END);
max_data = ftell(fp)/sizeof(Client_account);
/*if (clnt_id > max_data)
{
fclose(fp);
return NULL;
}*/
fseek(fp,(clnt_id-1)*sizeof(Client_account),SEEK_SET);
/*if (clnt_id <= max_data)*/
{
fread(&account,sizeof(Client_account),1,fp);
}
fclose(fp);
return (&account);
} |
Je conçois qu'il soit difficile de m'aider, n'ayant que des "morceaux" de mon code, mais si quelqu'un a une idée pour m'aider, je lui en serait vraiment reconnaissant car je bloque sur cette erreur depuis plusieurs heures
Merci beaucoup