Bonsoir tous le monde,

avant de vous exposer mon problème, je vous explique le contexte, je suis actuellement en 1ère année de DUT Réseau et tétécom, et en cette fin d'année nous avons un projet informatique en C ou l'on doit utiliser entre autres les socket.

Projet : Création d'un jeu en réseau, ou je choisi pour le moment d'utiliser TCP pour communiquer. Donc pour le moment j'ai créer deux programme un serveur et un client ; voici pour le moment comment ils fonctionnent :

le serveur démarre, se met en écoute, en attente d'un nombre de joueur ( mis dans un #define pour avoir le choix), une fois que le nombre de joueur attendu soient connecté, le serveur entre le message qu'il souhaite, ici on demande au joueur d'entrer le pseudo, une fois ceci fait, le serveur garde les pseudos dans un tableau et les renvois à chacun des joueurs.

Après un petit moment, mes deux programmes fonctionnent, et c'est la que les choses pour moi se compliquent, la création de fonction et l'ajout de paramètres et tous ce qui va avec (pointeur, .h,.... )
Depuis que je suis dedans plus rien ne fonctionne comme je le veux :/

En particulier deux ou trois fonction lier à l'envoi et la réception de donnée, par exemple lors que deux client se connecte, le serveur les accepte leur demande leur pseudo, les clients envoi leur pseudo, et la le serveur reçoit bien le premier pseudo mais pas le second, ensuite alors que le premier client reçoit les pseudos (enfin les caractère incompréhensible ), le second après avoir envoyé son pseudo, n'a plus aucun message du serveur , à moins que je quitte le programme serveur, et la il m'affiche un message, me disant qu'il y a un probleme de réception ( ce qui est du coup normal )


Voici mon code serveur :

main.c
erreur = DiffuserMessage(csock,buffer);
if (erreur!=0)
{
printf("\nProbleme de broacast du a l'erreur : %d",erreur);
Quitter(sock,csock);
}
else
printf("\nMessage envoye a tous les clients : OK \n");

erreur = RecupererPseudo(csock,nom);
if (erreur!=0)
{
printf("\nProbleme de récuperation de pseudo du a l'erreur : %d",erreur);
Quitter(sock,csock);
}
else
{
for(i=0;i<CLIENTMAX;i++)
{
printf("\nPseudo : %s",nom[i]);
}
}

erreur = DiffuserPseudo(csock,nom);
if (erreur!=0)
{
printf("\nProbleme de diffusion de pseudo du a l'erreur : %d",erreur);
Quitter(sock,csock);
}
else
printf("\npseudo envoye : OK");
}
reseau.h
#include <winsock2.h>
#define PORT 2023
#define CLIENTMAX 2

typedef char chaine[20];
typedef char string[20];

int InitDLL();
int OuvrirSocket(SOCKET *sock);
int AttenteConnexionClient(SOCKET sock,SOCKET csock[]);
int DiffuserMessage(SOCKET csock[],char buffer[]);
int RecupererPseudo(SOCKET csock[],chaine nom[]);
int DiffuserPseudo(SOCKET csock[],chaine nom[]);
int FermerSocket(SOCKET sock,SOCKET csock[]);


reseau.c
int DiffuserMessage(SOCKET csock[],char buffer[])
{
int erreur,i;
gets(buffer);
for(i=0;i<CLIENTMAX;i++)
{
erreur = send(csock[i],buffer,1024,0);
if (erreur == SOCKET_ERROR)
return WSAGetLastError();
}
return 0;
}

int RecupererPseudo(SOCKET csock[],chaine nom[])
{
int erreur,i;
for(i=0;i<CLIENTMAX;i++)
{
erreur = recv(csock[i],nom[i],20,0);
if (erreur == SOCKET_ERROR)
return 1;
else
{
nom[i][erreur]=0;
return 0;
}

}
}

int DiffuserPseudo(SOCKET csock[],chaine nom[])
{
int erreur,i,n;
char buffer[1024];
for(i=0;i<CLIENTMAX;i++)
{
for(n=0;n<CLIENTMAX;n++)
{
erreur = send(csock[i],nom[n],strlen(nom[n])+1,0);
if (erreur == SOCKET_ERROR)
return WSAGetLastError();
else
return 0;

recv(csock[i],buffer,1024,0);
}
}
}
Coté client :

main.c
erreur = ReceptionServeur(&sock,buffer);
if (erreur!=0)
{
printf("\nProbleme de reception du a l'erreur : %d",erreur);
Quitter(sock);
}
else
printf("\nMessage serveur : %s\n",buffer);

erreur = EnvoiPseudo(&sock,buffer);
if (erreur!=0)
{
printf("\nProbleme d'envoi du pseudo a l'erreur : %d",erreur);
Quitter(sock);
}
else
printf("\npseudo envoye : OK \n");

for(i=0;i<CLIENTMAX;i++)
{
erreur = ReceptionClients(&sock,nom);
if (erreur!=0)
{
printf("\nProbleme reception pseudo client du a l'erreur : %d",erreur);
Quitter(sock);
}
else
printf("\nServeur : Joueur %d : %s",i+1,nom[i]);
}
reseau.h
#include <winsock2.h>
#define PORT 2023
#define CLIENTMAX 2

typedef char string[20];

int InitDLL();
int OuvrirSocket(SOCKET *sock);
int ConnexionServeur(SOCKET *sock);
int ReceptionServeur(SOCKET *sock, char buffer[]);
int EnvoiPseudo(SOCKET *sock, char buffer[]);
int ReceptionClients(SOCKET *sock,string nom[]);
int FermerSocket(SOCKET *sock);
void Quitter(SOCKET sock);
reseau.c
int ReceptionServeur(SOCKET *sock, char buffer[])
{
int erreur;
erreur = recv(*sock,buffer,1024,0);
if (erreur == SOCKET_ERROR)
return 1;
else
{
return 0;
}
}

int EnvoiPseudo(SOCKET *sock, char buffer[])
{
int erreur;
scanf("%s",buffer);
erreur = send(*sock,buffer,strlen(buffer)+1,0);
if (erreur == SOCKET_ERROR)
return WSAGetLastError();
else
return 0;
}

int ReceptionClients(SOCKET *sock,string nom[])
{
int i,erreur;

erreur = recv(*sock,nom[i],20,0);
if (erreur == SOCKET_ERROR)
return 1;
else
{

return 0;
}
send(*sock,"ok",2,0);

}
donc voila si quelqu'un aurait une idée de probleme =), ou si vous avez des conseils pour quelque améliorations quelque soit !

Merci d'avance =)