bon voila comme indiquer dans la sujet "lib réseaux" de Tmyke ou je disais que je recoderais tout a partir du morceaux de code de Yamashi
bien que mon code se rapproche encore beaucoup de celui de départ poster par Yamashi.... °°'
le serveur reçoit des packets que le client n'envoie pas
le client est sensée envoyé "une chaine bidon a envoyer" tout les sec, voila se que le serveur récupère :
code console :
Seeder demarre : a l'ecoute du port 23 Nouveau client, IP : 192.168.1.3 Nous avons recu : 1499 octets Buffer : ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1499 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1421 octets Buffer : ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : 1460 octets Buffer : une chaine bidon a envoyer ?Nous avons recu : 1460 octets Buffer : lJB ?Nous avons recu : 1176 octets Buffer : ig/i386/w32-shared-ptr.c ?Nous avons recu : -1 octets Buffer : ig/i386/w32-shared-ptr.c Process returned -1073741819 (0xC0000005) execution time : 18.250 s Press any key to continue.
je me demande d'où cela peut venir ? ^^
faut dire que vu les connaissances que jais dans se domaine ...
projet et source
Hors ligne
à ouai cela n'était aussi méchant que je ne le pensai ^^
merci
Hors ligne
Encore moi
bon le code marche impeccable dans tout les sensée après test
seul problème :
si l'un des clients se déconnecte le serveur renvoie -1073241819 puis se ferme ( erreur de ? )
voila donc je voudrais juste savoirs comment détecter la déconnections d'un client pour le supprimer de la list d'envoi/réception
jais vu qu'elle que par l'utilisation de FD_CONNECTE, FD_ACCEPT ... etc si sa un qu'elle conque rapport ...
le déboguer ne trouve rien ...
Hors ligne
Si recv retourne -1 le client est déconnecté.
Hors ligne
et bien il y a deja un test sur recv avec SOCKET_ERROR qui vaut -1
qui suit d'un SockList.erase mais sa change rien le serveur crash toujours ...
edit : jais fait un upgrate du rar qui est sur le précédent message si vous vouler voir
Dernière modification par Magun (11-01-2009 23:26:49)
Hors ligne
bon jais trouver une solution temporaire ....
le client envoi /*DECO*/ quand il quitte le programme pour que le serveur l'enlève de la list ....
Hors ligne
Essaye :
if(FD_ISSET(*It,&readfs))
{
int n = recv(*It,buffer,sizeof(buffer),0);
if(n == -1)
SockList.erase(It);
else {
printf("> %s\n",buffer);
sendMsg(std::string(buffer));
}
}
/*DECO*/
Pas bien il ne faut pas envoyer des données raw il faut que tu y aille a coup de opcode cast.
Avant de faire le système réseau il faut bien bosser sur la couche qui va te permettre de travailler sur les données avant de te lancer dans la communication.
Par exemple j'ai créer un classe ByteBuffer qui est capable de caster tout est n'importe quoi je peux même envoyer une classe sur le réseau et la reinterpret côté client ou serveur.
Il faut faire en sorte que la gestion soit simple et rapide, il faut que tu puisse te dire : " Cool je vais plus avoir a toucher au réseau n'y a m'en soucier" tu as besoin d'un système indépendant qui peut tout gérer seul.
De plus tu dois faire en sorte que le système gère lui même toutes les erreurs possible...
Dernière modification par yamashi (13-01-2009 03:22:40)
Hors ligne
ahh dsl je n'est pas mis a jours mais source depuis le dernier post ..
je passe par qu'elle que structure ..
j'utilisais déjà le même code juste que jais des struct en + :
mais le serveur crash toujours si un client est quitter anormalement :s
je teste quand même avec le tien mais les résultats sont les même ... , je mais a jours mais source
et dsl de ne pas lavoirs plus tôt, je doit tempêter un peut ...
Dernière modification par Magun (16-08-2009 10:58:19)
Hors ligne
J'ai remplacer :
if(sem.info.octRecv == -1) SockList.erase(It);
par
if(sem.info.octRecv == -1) { SockList.erase(It); break; }
C'est seulement que tu itére sur le même objet 2 fois donc une fois qu'il n'existe plus tu ne peux plus itérer dessus.
Hors ligne
ah ouai ... cool ... sa marche
j'aurais jamais pensé a un break, je comprend bien que je peut pas itérer 2 fois dessus, une erreur de ma par ...
merci beaucoup
Hors ligne
bon je m'embete pas je reprend se topic
jvien d'esseyé de compilé le serveur sous unix mais code blocks ne trouve pas -lgmon et je trouve pas grand chose sur google :[
si on peut me dire a qu'elle paktage sa correspond, au pire je l'instalerais manuelement
ps : sous mandriva
Hors ligne
ses bon
Hors ligne
Bien joué ^^
Hors ligne
ce n'est pas une bonne méthode
l'orsque tu clot la connetion du client un packet est envoyer au serveur pour le notifier
c'est intégret au protocol, et du coter serveur si tu reçois -1 par recv c'est que la connection a été fermer ou intérompue
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 53 invités en ligne Aucun membre connecté RSS Feed |