Client/serveur ( comment dedoubler un meme programme en client et serveur)

herve_blondel Messages postés 8 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 7 décembre 2004 - 20 févr. 2004 à 18:12
herve_blondel Messages postés 8 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 7 décembre 2004 - 26 févr. 2004 à 14:52
salut a tous !
je suis entrain de faire un projet de simulateur du protocol RIP et voici ce qui me casse la tete.
en fait, sur un poste je dois simuler plusieur routeurs connecte entre eux. donc chaque routeur a une partie client et une partie serveur. voici ce que j'ai donc bricole.

....
.....
/*
definition des variable globale ici
....
*/

int main{
/*
definition de qques variable locale
*/

if(!fork()){
partie ou fonction qui sert de client:
ici,chaque 30 seconde,le client envoi un message au serveur
d'un autre routeur.
dont ici,il y'a une boucle infini.
c'est pourkoi j'ai dedoubler le programme avec fork().

}
{ partie du serveur
/*
initialisation des donnes pour le serveur.

*/

while(1){
accepte la connection cree un fils qui traite la requete
et retoune attendre les connextions.
if(!for()){
le fils execute la tache et se termine.
}

}//fin du serveur

}// fin du programme.

mon probleme est que lorsque j'utilise fork() pour dedoubler le programme en serveur et client, je constate qu'il y'a vraiment separation ( et je ne voulais pas que ce soit ainsi) car les variables globales modifiees par le client ne sont pas vus par le serveur et vice versa. tout ce passe comme si j'avais deux programmes distint pourtant,mon serveur doit utiliser les variable goblale modifier par le client: comme faire ? j'ai aussi entendu parler des threads mais je ne sais pas comment ca fonction ni comment l'utiliser.
je voudrais que quelqu'un me fasse une eboche d'un programme qui se divise en deux mais chaqu'une des parties pouvant modifier une meme variable globale( pas une copie de la variable).
merci et excusez moi de la longueur.je suis un debutant en c++.

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 févr. 2004 à 18:18
Sur win32 et pour un meme exe lance plusieurs fois.

#pragma data_seg("Shared")
int g_v1 = 0; // une var globale
// les autres a suivres

#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")

et tu t'en sers comme d'hab.

ciao...
BruNews, Admin CS, MVP Visual C++
0
herve_blondel Messages postés 8 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 7 décembre 2004
26 févr. 2004 à 14:52
merci pour la reponse mais ca ne marche pas sous Linux.en fait j'avais mal pose ma question.
l je voudrais ceci:

#pragma data_seg("Shared")
int g_v1 = 0; // une var globale

#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")

int main(){

if(!fork()){
while(1){
sleep(8);
g_v1++;
cout<<"dans client"<<g_v1<<endl;
}
}
while(1){
sleep(20);
cout<<g_v1<<endl;
}
return 0;
}

juste pour faire comprendre ce que je voudrais:

dans ce petit code, apres la duplication du programme, la variable g_v1 modifiee(incrementee)dans le premier while n'ai pas vu dans le second while(en fait,dans le second while,l'affichage est toujours 0) mon pb c'est que je voudrais que la modification de g_v1 soit vu dans les deux while.
s'il y'a une idee,n'esiter pas. merci.

8-)
0
Rejoignez-nous