Serveur C

andoid Messages postés 106 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 16 juin 2013 - 18 avril 2012 à 19:28
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 3 mai 2012 à 11:02
Bonjour voici le squellete de mon serveur j'ai un probléme pour envoyer des messages
au faite je suis entrain de teste donc je veut envoyer la même chaine au client a chaque tour de boucle mais au lieu de faire cela le serveur envoie juste le premiere du message 'Bienvenue client' et le reste de ce qu'il a recu du client quelqu'un pourrait il m'aider je m'y rertouve pas..
Merci voici la partie qui bug

for(;;)
{
/* Attente pendant laquelle le client se connecte */
printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);

csock = accept(sock, (SOCKADDR*)&csin, &recsize);
printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));

if(pid=fork ()==0 )
{
/* Fermeture de la socket */
// On n’a plus besoin de la socket du père
closesocket(sock);

bzero (buffer, 80) ;
read (csock, buffer, 80) ;

/*---------------------------------------------Code du serveur---------------------------------------*/


if (strncmp (buffer,"TOUR",4)==0) // Je teste si le client qui se connecte est une tour
{strcpy(&chaine,"Bienvenue client physik");
while (1) // C'est dans cette boucle que tout va se passer
{

Reception(csock,buffer);


Envoyer(csock,&chaine,strlen(&chaine));

}
}
else
{
printf("Ce client est un chimiste");

}

/*-----------------------------------------------Fin code serveur--------------------------------------------*/
// Fin de la connexion avec le client
close(csock);
exit(0);

}
/*Le pére n'a plus besoin de la socket client*/
closesocket(csock);
}

1 réponse

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
3 mai 2012 à 11:02
Salut, il manque un bout de code essentiel : Reception() Envoyer().

Quand le serveur ou le client font un send() ou un recv() il faut s'assurer de préciser à ces fonctions combien d'octets on veut envoyer ou recevoir...

... Et toujours vérifier ce que retournent les fonctions pour s'assurer du bon déroulement du programme et prendre une décision en cas de problème.

Sachant celà on peut même ne plus invoquer send() et recv(); mais read() et write() directement: ces fonctions sont enveloppées.

De plus terminer la chaine reçue par zero pour pouvoir l'afficher avec printf(). printf() est très utile pour débugguer l'application et savoir ce qui se passe.

Quel est le modèle d'I/O choisi pour le serveur et pour le client? Tu veux faire un chat donc regarde du côté du multiplexage d'entrées sorties asynchrone (avec select()). C'est mieux pour le serveur: peu de code mais vraiment fantastique. Sinon bonne chance avec les fork().
0
Rejoignez-nous