Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1093 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  problème jeux devinette client/serveur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème jeux devinette client/serveur

n°1530801
trig
Posté le 19-03-2007 à 21:38:32  profilanswer
 

Bonjour,
voila j'ai 2 fichier cpp l'un qui joue le role de serveur et un autre client ,j'ai un ptit souci en voulant y mettre un jeu de devinette auquel le serveur choisi un nombre au hasard et le client essaye de le deviner. Alors + precisement mon probleme est k'apres que le client fait une premiere tentative je n'arrive pas a faire en sorte a ce que le client puisse reessayer, cela me bloque apres la validation du premier essai. Voila ce que j'ai modifier dans le parti server only:
 
_______________________parti serveur __________________
 
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <time.h>
#pragma comment(lib, "ws2_32.lib" )
#define LG_MAX_REQUETE 1024
void traitement(SOCKET, int i);
void main() {
int val,port=0,erreur,i;
WSADATA wsa;
/* initialisation */
WSAStartup(MAKEWORD(2,0), &wsa);
SOCKET serveur;
SOCKET client;
SOCKADDR_IN sin;
SOCKADDR_IN clientsin;
/* saisir la configuration du serveur */
printf("Entrez le numero de port: " );
scanf("%d",&port);
printf("Entrez le nombre cache: " );
scanf("%d",&i);
/* creation de la socket serveur */
serveur=socket(AF_INET,SOCK_STREAM,0);
if(serveur==INVALID_SOCKET)
{
perror("erreur de creation de la socket" );
exit(-1);
}
/* configuration de la socket */
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
/* attacher le socket au n° de port*/
erreur=bind(serveur,(SOCKADDR *)&sin, sizeof(sin));
if(erreur == INVALID_SOCKET)
{
perror("bind" );
exit(-1);
}
/* creation d'une file d'attente de demande de connexion */
listen(serveur,0);
val=sizeof(clientsin);
printf("\n\tServeur en route\n" );
while(1)
{
/* accepter une connexion */
client=accept(serveur,(SOCKADDR *)&clientsin,&val);
if(client == INVALID_SOCKET)
{
perror("erreur de connection" );
exit(-1);
 
}
 
/* fonction qui utilise la socket */
traitement(client, i);
}
}
/* Traitement : traite la requete envoyer par le client
*/
void traitement(SOCKET client, int i)
{
int lg, nb,nb_essai=0;
char reponse[LG_MAX_REQUETE];
/* attendre la reception d'une requete sur la socket "client" */
lg=recv(client,reponse,LG_MAX_REQUETE,0);
reponse[lg]='\0';
nb=atoi(reponse);
nb_essai++;
if(nb < i)  
{
 printf("trop petit\n" );
}
if(nb > i)  
{
 printf("trop grand\n" );
}
while (nb!=i);
 return;
if(nb==i)
 {printf("Bingo vous avez trouvez en %d essais\\n",nb_essai);
}
 
 
 
lg=strlen(reponse);
/* envoyer une requete sur la socket "client" */
send(client,reponse,lg,0);
 
}
 
_________________parti client______________
 
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib" )
#define LG_MAX_REQUETE 1024
void traitement(SOCKET);
void main()
{
int port=0,erreur;
struct hostent *nom_serveur;
char ad_serveur[255];
WSADATA wsa;
/* initialisation */
WSAStartup(MAKEWORD(2,0), &wsa);
SOCKET client;
SOCKADDR_IN sin;
/* saisir la configuration du client */
printf("Entrez l'adresse du serveur :" );
scanf("%s",ad_serveur);
printf("Entrez le numero de port: " );
scanf("%d",&port);
nom_serveur=gethostbyname(ad_serveur);
if(nom_serveur==NULL)
{
perror("adresse non valide" );
exit(-1);
}
/* creation de la socket client */
client = socket(AF_INET,SOCK_STREAM,0);
if(client==INVALID_SOCKET)
{
perror("erreur de creation de la socket" );
exit(-1);
}
/* configuration de la socket */
memcpy(&sin.sin_addr,nom_serveur->h_addr,nom_serveur->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
/* connecter le client au serveur */
erreur=connect(client, (SOCKADDR *)&sin, sizeof(sin));
if(erreur==INVALID_SOCKET)
{
perror("erreur de connexion" );
exit(-1);
}
/* fonction qui utilise la socket */
traitement(client);
/* fermer le socket */
closesocket(client);
WSACleanup();
}
/*
Traitement : taper heure pour avoir l'heure du serveur, ou date pour obtenir la date
du serveur
*/
void traitement(SOCKET client)
{
int lg;
char requete[LG_MAX_REQUETE];
printf("ca marche?\n" );
scanf("%s",requete);
lg=strlen(requete);
send(client,requete,lg,0);
lg=recv(client,requete,LG_MAX_REQUETE,0);
requete[lg]='\0';
printf("%s",requete);
system("PAUSE" );
}

mood
Publicité
Posté le 19-03-2007 à 21:38:32  profilanswer
 

n°1530909
_darkalt3_
Proctopathe
Posté le 20-03-2007 à 09:54:32  profilanswer
 

- balises codes
- utilises un debugger pour étudier le comportement pas à pas de ton programme


---------------
Töp of the plöp
n°1531729
franceso
Posté le 21-03-2007 à 16:42:37  profilanswer
 

il y a des problèmes dans la fonction traitement() :
- la boucle while est mal placée.
- les messages imprimés avec printf sur le serveur ne servent à rien puisque le client ne les voit pas


---------------
TriScale innov
n°1532432
trig
Posté le 23-03-2007 à 00:00:08  profilanswer
 

je vien de regler le probleme en mettant un sprintf a la place et j'ai pu mettre les resultat dans le coté client, par contre je n'arrive pas à trouver ou il faut que je met la boucle while return pour faire retourner à void traitrement pour que le client puisse recommencer s'il rate. ou dois je le placer precisement ?
 
Merci pour votre aide.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  problème jeux devinette client/serveur

 

Sujets relatifs
Problème validation sous firefoxproblème de déallocation de mémoire
Probleme d'actualisationProblème avec hover.
Probleme fonction mailphp + svg probleme listage
bonne pratique pour les jeux de caracteres (ISO 8859-1 / UTF-8 /pspad)Pas de trigger pour SQL serveur 2005 !
changement de mdp - probleme base de donnee[CSS] Problème padding sous IE
Plus de sujets relatifs à : problème jeux devinette client/serveur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR