cs_Adict
Messages postés28Date d'inscriptionvendredi 1 janvier 2010StatutMembreDernière intervention10 août 2010
-
10 août 2010 à 18:53
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 2021
-
11 août 2010 à 08:26
Bonjour
alors voila j'ai fini un projet mais il y a un problème.
Il se compose d'une application client et serveur. Il y a quelque temps j'avais fait se projet pour Windows et récemment je l'ai adapté sur Linux (Client + serveur)
je dispose d'un serveur sous Linux à domicile, par conséquent je vais mettre l'application serveur codé pour Linux sur le PC. Mais est-ce que un client dont les sockets sont exclusivement pour Windows pourra se connecter au serveur ? en théorie oui car il n'y a que les includes qui changent entre les 2 clients.
autre chose. Il arrive à mon serveur (codé sur Linux) de s'arrêter celui de Windows ne coupait pas MAIS...
je pense à une fuite de mémoire ou à une "surcharge".
sous Windows comme sous Linux le serveur fonctionne correctement jusqu'à qu'il arrive un problème (pas très bon à mon avis) mais qui ne fait pas (sous Windows) s'arrêter le programme.
Je vais essayer de vous expliquer en détaille se qui ce passe.
-Le serveur attend une connexion
-Client1 se connecte
-Client1 écrit "il y a quelqu'un ?"
-le serveur affiche "il y a quelqu'un ?" et le renvoi au(x) client(s)
-Client2 se connecte
-Client2 écrit "salut"
-le serveur affiche "salut" et le renvoi au(x) client(s)
-Client1 se déconnecte car il n'aime pas Client2
-Le serveur par dans une boucle infini, la console deviens toute noir et la barre descend
-Client2 écrit "il est nul Client1 "
-le serveur affiche et renvois le message (le serveur continu dans sa boucle infini mais on voit pendant 0.3 sec que le message s'affiche) par conséquent le problème vient de la fonction select ? (sous windows malgré se problème on peut continuer à se connecter, échanger des messages etc...)
sous Linux le serveur crache soit:
-Quand un client part (donc dès que la boucle infini se met en route)
-quelque seconde après (de 5 sec à 1 min après le départ de la boucle)
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 11 août 2010 à 08:26
salut,
pour moi ton code ne correspond pas à ton scénario.
Pourquoi tu as cette ligne dans le thread principal ? :
n = recv(s_client, buffer, sizeof(buffer) - 1, 0);
Ton code ne gère pas les déconnexions.
while (1) //boucle de réception et d'envois
{
memset(res.buffer, '\0', sizeof(res.buffer));
res.n = recv(res.s_client, res.buffer, sizeof(res.buffer) - 1, 0);
if (res.n < 0)
break;
printf("%s\n",res.buffer); // j'affiche le message
sprintf(res.buff, "%s", res.buffer); // je copie le "buffer" dans "buff"
/* Et la , on envoie à tous les clients ! */
int i;
for (i = 0; i < index_s; i++)
{
send (s_global[i], res.buff, (int)strlen(res.buff), 0); // envoie du buff
}
}