psyjc
Messages postés182Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention18 avril 2008 20 janv. 2007 à 21:06
J'ai trouvé.. (ca m'apprendra a pas chercher...)
psyjc
Messages postés182Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention18 avril 2008 20 janv. 2007 à 20:54
Salut blackgoddess.
je me suis inspiré de ton code pour coder un serveur multi clients sur un seul thread mais je le problème qui a été évoqué ci dessus : wsawaitformultipleevent boucle et bouffe 100% proc. comment a tu fais pour régler ce problème et être bloquant dans l'attente d'un évènement ?
Merci d'avance?
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 27 mai 2005 à 10:47
Stood > pour le FD_SETSIZE, on peut en effet changer la valeur.
Malheureusement cette valeur est statique, définie a la compilation.
Je ne connais pas l'implémentation des fd_set, mais je suppose que ca doit etre un tableau. Aussi définir une trop grande valeur par rapport au nombre de clients potentiels pourrait nuire aux performances par exemple.
Ca ne permet donc pas une gestion souple du nombre de clients :(
vinceVD
Messages postés11Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention26 mai 2005 26 mai 2005 à 15:07
Salut je viens aussi de me truover bloquer a cause de la limite de 64connex, au début je croyé qe ct a cause de XP SP2 mais apparament non.J'ai vu les deux méthode que tu as proposé et je voudrait savoir si quelqu'un a testé une de ces soluces ou tout simplement a réussi a contourner le pb. Merci de vos réponse
vinceVD
Messages postés11Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention26 mai 2005 26 mai 2005 à 15:07
Salut je viens aussi de me truover bloquer a cause de la limite de 64connex, au début je croyé qe ct a cause de XP SP2 mais apparament non.J'ai vu les deux méthode que tu as proposé et je voudrait savoir si quelqu'un a testé une de ces soluces ou tout simplement a réussi a contourner le pb. Merci de vos réponse
CptLuthor
Messages postés25Date d'inscriptiondimanche 7 novembre 2004StatutMembreDernière intervention 9 décembre 2004 13 nov. 2004 à 22:39
salut
Quand on est conecter avec ton client et ton server, peut t on se voi en reseau avec un pot, c a d par exemple se voir dans les jeux ?
cs_Stood
Messages postés1Date d'inscriptionmardi 25 juin 2002StatutMembreDernière intervention12 août 2004 12 août 2004 à 12:25
salut, dis moi blackgoddess, la limite des 64 clients ne viendrait pas de la variable FD_SETSIZE ?
je cite "Four macros are defined in the header file Winsock2.h for manipulating and checking the descriptor sets. The variable FD_SETSIZE determines the maximum number of descriptors in a set. (The default value of FD_SETSIZE is 64, which can be modified by defining FD_SETSIZE to another value before including Winsock2.h.)"
FreeYo
Messages postés31Date d'inscriptionjeudi 31 juillet 2003StatutMembreDernière intervention 7 octobre 2004 10 juin 2004 à 16:59
Une mine d’or !!!!
Un grand grand merci !
cs_olecossois
Messages postés18Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention12 mars 2008 16 mars 2004 à 10:31
A quand la version qui dépasse les 60 clients, vraiment on l'attend ce serait vraiment cool
En tout cas ça fonctionne trop bien avec 60 clients
Vraiment très bon code
je mets 10/10
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 21 nov. 2003 à 15:52
sinon, pour eviter la limitation à 62 clients, je vois deux possibilités :
- créer une fenetre (invisible, juste pour ses messages) et faire passer les "evenements" des sockets asynchrones par cette fenetre. avantage : un seul thread créé, limitation du nombre de clients théoriquement a la limite de la machine/système
inconvenient : une application qui utiliserait ce module pour sa gestion du reseau serait plus facilement attacable avec un "hook" de la "callback" de la fenetre (facile a réaliser), ce qui permettrait de recevoir les messages des sockets.
- créer un gestion de thread qui crée un thread tout les 64 clients qui attendent chacun les evenements de 64 sockets.
avantage : plus difficilement attacable a ma connaissance.
inconvenient : ca peut devenir tres lourd s'il y a beaucoup de clients ...
qq1 saurait quelle méthode choisir, ou verrait une autre possibilité ?
merci :)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 21 nov. 2003 à 01:39
(j'y ai d'ailleurs répondu deja un peu plus haut ...)
sinon je grace a la magnifique source de BigInt qui a été posé récement je suis en train d'implémenter la possibilité de créer une connexion cryptée, puis je pense aussi rééecrire cette source, ainsi qu'un client en utilisant les std::string du c++ et la stl (std::vector, p-e d'autres).
D'ailleurs, à ce sujet, pourrais-tu mettre un exemple de client, pour qu'on sache comme l'écrire? parce que je pense que mes temps de réponse pas tip top sont dus à ça...
Enfin, si c'est possible.... je sais que c'est pas beau de réclamer ;)
Simple, je suis d'accord ;) mais ça fonctionne bizarrement... est-ce que c'est du à mon client qui prend pas mal de ressources... je sais pas trop.... c'est possible. Ou est-ce que c'est du au fait que j'envoie des char[256] ?
That Is the question....
En tout cas, ça fonctionne pas mal, merci pour ce code ;)
MzF
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 20 nov. 2003 à 19:09
euh ... bizarre les send ... ca m'avait semblé simple a utiliser => g pas tres bien fait gaffe a ca :p, je vais me documenter sur ces fonctions...
Salut, j'ai intégré ce code à mon prog et çamarche vraiment bien, par contre, j'ai une question: quand j'utilise la commande Send du Serveur, je suis obligé de la lancer 2 fois de suite, je comprends pas trop pourquoi, est-ce que quelqu'un aurait eu le même problème et aurait trouvé une solution, ou suis-je le seul dans ce cas là?
Un autre truc, je suis obligé de mettre une pause entre 2 Send à des clients différents... Sleep 100, sinon mon 2ieme message n'est pas envoyé...
Voili voilou,
Merci de vos réponses
A+
MzF
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 29 sept. 2003 à 18:21
euh ... alors en fait, la fameuse limite des 64 intervient ici ... WSAWaitForMultipleEvents ne peut pas prendre en compte plus de 64 events ... si on enleve les 3 evenements clientlistchange, heclose, et celui du socket qui ecoute, il doit etre possible de supporter 61 clients ... c'est une decouverte que j'ai faite il y a pas longtemps ...
fyleo
Messages postés11Date d'inscriptionjeudi 6 juin 2002StatutMembreDernière intervention20 novembre 2003 29 sept. 2003 à 17:54
ba en fait j'ai réussi a avoir cette erreur en testant le serveur avec un programme qui connecte plusieur client a la suite (sans les déconnecter) et au bout du 60 iéme le programme a fait cette erreur mais ca peut très bien être du a ce ke les connexion se sont fait trop rapidement pour le programme ^^ mais sinon le serveur marche ss pb
cs_carat
Messages postés13Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention21 septembre 2009 29 sept. 2003 à 08:57
Zut g oublié que ct de l'html :-)
Je disais donc, il n'y a aucun backslash! Mais je retire ce que j'ai dis car c le site qui les a enlevé, sorry!
cs_carat
Messages postés13Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention21 septembre 2009 29 sept. 2003 à 08:54
Fyleo, d'après ce que je vois dans ton log, les chemins d'accès de tes librairies sont foireux!, il manque un !!!! Vérifie déjà ça!
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 29 sept. 2003 à 00:51
euh ... qq1 d'autre a un truc semblable ? sinon pense bien a mettre tes libs en multithread ds ton compilo
fyleo
Messages postés11Date d'inscriptionjeudi 6 juin 2002StatutMembreDernière intervention20 novembre 2003 28 sept. 2003 à 13:56
j'ai oublier de dire la ligne ou ca bugguais ^^
c la ligne 614 de network.cpp
dans la fonction "CNetServer::ThreadEntry(CNetServer* MyServ)"
et dans le cas ou ca bug MyServ = 0x0000003e ^^
fyleo
Messages postés11Date d'inscriptionjeudi 6 juin 2002StatutMembreDernière intervention20 novembre 2003 28 sept. 2003 à 13:51
slt déjà je te félicite pour cette source vraiment très bien faite et aussi parce que j'ai remarquer un problème d'accès avec le thread
le log du debugguer :
'test.exe' : Chargé 'E:Visual Studio Projects estRelease est.exe', Les symboles ont été chargés.
'test.exe' : Chargé 'C:WINDOWSsystem32
tdll.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32kernel32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32ws2_32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32msvcrt.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32ws2help.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32advapi32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32
pcrt4.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32mswsock.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32wshtcpip.dll', Aucun symbole n'a été chargé.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Le thread 'Thread Win32' (0x8d4) s'est arrêté avec le code -1073741510 (0xc000013a).
Le thread 'Thread Win32' (0xbc8) s'est arrêté avec le code -1073741510 (0xc000013a).
Le programme '[2544] test.exe: Natif' s'est arrêté avec le code -1073741510 (0xc000013a).
voila et encore bravo!!!
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 11 sept. 2003 à 17:56
pour le cryptage, on verra ca plus tard, j'ai pas le niveau de maths appliqués pour ca pour l'instant ... si qq1 a un lien util (les algos je les comprends, mais je n'arrive pas encore a travailler convenablement sur les grands entiers...)
sinon, pour le fantôme, je vais jeter un coup d'oeil ...
cs_carat
Messages postés13Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention21 septembre 2009 11 sept. 2003 à 10:38
Salut BlackGoddess, c'est encore moi... je dois te paraître embetant mais y'a encore un prob :-)
Faudrait une solution pour gérer les timeout sur les connex clients, car qd un client plante, son "fantôme" reste malgré tout connecté pour le serveur. Ca devient très embetant si le serveur tourne non-stop... à la longue... fin au risque de me répeter, tu risques de remplir ta mémoire inutilement lol... et surtout.. blablabla 'fin tu vois la merde quoi ;-)
ptimine
Messages postés1Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention10 septembre 2003 10 sept. 2003 à 22:34
Respect pour tes compétences. Ce code est bien ficellé ! :) Je vais m'en inspirer pour percer les secrets de la prog reseau et, puisque tu les utilise avec pertinance, les threads également, je ne les connais pas encore.
C'est cool d'aider tant de gens par ton travail sur ce code !
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 24 juin 2003 à 14:04
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 24 juin 2003 à 12:53
dsl, boulette dans le code de la dernier MAJ, CNetServer::DelMessID etait completement foireuse, c'est corrigé :)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 23 juin 2003 à 18:02
MAJ mineure : on peut maintenant configurer pour nettoyer les messages comme disait carat (je l'ai mis en optionnel car par exemple si le client envoit une requete puis se deconnecte, le serveur peut vouloir la traiter malgré la déconnexion), et aussi configurer pour mettre/enlever un message au depart/arrivée d'un client.
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 10 juin 2003 à 09:35
pouarf dieu, la blague :p ...
merci pour le 'petit détail' :) je corrigerais qd j'aurais le tps :)
cs_carat
Messages postés13Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention21 septembre 2009 10 juin 2003 à 08:27
Salut BlackGoddess,
Ton serveur est nickel, tu as juste oublié un petit détail: quand un client se déconnecte, n'oublie pas de nettoyer les éventuels messages qu'il aurait pu y laisser, sinon tu risques de remplir, à la longue, ta mémoire inutilement!
Bien a toi, hooo dieu! ;-)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 20 mai 2003 à 09:45
(notez aussi que mon commentaire précédent est truffé de fautes d'orthographe)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 20 mai 2003 à 09:44
I/O Completion Ports ok je me pencherais de ce coté (note qd meme que je n'utilise pas un nombre de thread egale au nombre de client, mais juste un thread en tache de fond pour gerer les evenements des sockets)
Merci de la remarque :)
cs_Klephte
Messages postés22Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention 4 janvier 2022 20 mai 2003 à 09:33
Ta technique de programmation est originale donc merci pour ce bel effort.
Juste une remarque, si tu permets, j'ai eu l'occasion de développer un serveur IP et pour éviter l'utilisation d'un nombre de thread égal au nombre de clients j'avais,à l'époque, utilisé la technique des "I/O Completion Ports" qui donne les résultats tout à fait exceptionnels.
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 7 mai 2003 à 16:34
MAJ (correction des bugs)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 2 mai 2003 à 16:23
voila, je viens de finir de coder une classe pour travailler avec des grands entiers, qui va m'etre utile pour le cryptage dont je parlais plus haut :
http://www.cppfrance.com/article.aspx?Val=1775
bapt1080
Messages postés12Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention30 mars 2005 29 avril 2003 à 09:53
pas mal!
j'avais fait un serveur http en java mais c plus facile avec java
mais comme mon langage de prédilection est le c++ sa le fais bien que tu es fais sa, sa va m'aider a faire très vite des applis en reseau.
je vais chercher pour les events, j'avait pas trop eu de mal avec sa sur mon serveur...
@+
cs_krom
Messages postés5Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention28 avril 2003 26 avril 2003 à 11:58
lu,
désolé pr l'impertinence de ma remarque, ce n'est pas tout à fait ce que je voulais dire.
je suis avec intérêt l'évolution de ce serveur.
dès que tu auras progressé, fais le nous savoir.
bonne chance pour le développement et n'hésite pas à demander un coup de main.
++
cs_krom
Messages postés5Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention28 avril 2003 24 avril 2003 à 10:07
bon, déjà le 24/04 et pas de correction, si tu taffes encore dessus, préviens nous.
merci
cs_krom
Messages postés5Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention28 avril 2003 24 avril 2003 à 10:06
bon, déjà le 24/04 et pas de correction, si tu taffes encore dessus, préviens nous.
merci
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 14 avril 2003 à 22:53
de rien lol, ca fait plaisir des critiques pareilles lol :p
sinon je taff en ce moment sur la correction du bug des ressources par les events ...
grosiflex
Messages postés19Date d'inscriptionjeudi 4 octobre 2001StatutMembreDernière intervention21 octobre 2004 14 avril 2003 à 20:37
bah perso, merci pour le source, et les explications sur entercriticalsection();
dechire je galere un peu sur le thread, ce source est franchement cool pour ca, je met 10 directe, car tu t'es bien casser le cul je trouve franchment MERCI !!!
cs_adrien78
Messages postés23Date d'inscriptionlundi 15 avril 2002StatutMembreDernière intervention 8 décembre 2008 15 mars 2003 à 09:54
Slt, térrible ton code, il va me permettre de faire bcp de trucs, thx,
cependant, est ce qu' il est possible que tu mettes online un chti client ? histoire de voir comment le tt fonctionne...
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 25 févr. 2003 à 10:19
oui oui bien sur j'avais fait une tite classe client sur le mm modele, et mon client claquait absolument toutes les ressources de mon tit ordi (celui de test), jmen suis rendu compte et corrigé ac les events, je fais faire pareil pour le serveur :)
cs_HotSpot
Messages postés51Date d'inscriptionvendredi 7 février 2003StatutMembreDernière intervention28 octobre 2004 24 févr. 2003 à 22:00
merci .. pour les mutex et les samphores je suis au courant ...
sinon merci pour cette breve explication (lol) et sinon utilise les event pour corriger cette source .. bon courage ... ;)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 24 févr. 2003 à 09:29
sinon, pour les criticals sections, je 'texplique en gros le principe, pour l'utilisation de chaque fonctions (4 au total, plus une 5eme sous win2k/xp), go MSDN
donc, une critical section sert pour le multithread, pour eviter qu'un thread accede à un emplacement mémoire en mm tps qu'un autre.
par exemple ds ce source, le status du serveur peut etre lu/changé par les fonctions du serveur (qui ne sont p-e pas toutes executé par le mm thread), et le thread de gestion des sockets. ainsi, quand un thread veut lire en changer cette variable, il demande à "owner" la critical section. un seul thread peut "owner" la critical section en mm tps, aussi si un autre l'own deja, le thread attend (EnterCriticalSection ne retourne que qd elle a pu owner la CS). donc, une fois que le thread own la critical section, il sait qu'il est le seul a pouvoir accéder à la variable, donc pas de risque de lecture/ecriture simultanée. une fois qu'il a fini, il rend l'own de la critical section avec LeaveCriticalSection, pour qu'un autre thread puisse a son tour l'owner.
voila :)
sinon, g entendu parler des mutex aussi du mm style, sauf que la ca peut aussi fonctionner entre processus, et pas seulement entre threads d'un mm processus.
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 24 févr. 2003 à 09:22
oui oui oui je me suis rendu compte recemment de ce gros bug : en fait, au lieu d'attendre un evenement, le thread de fond tourne en boucle, d'ou son enorme utilisation du temps processeur, des je corrige la source, je la repose.
cs_HotSpot
Messages postés51Date d'inscriptionvendredi 7 février 2003StatutMembreDernière intervention28 octobre 2004 23 févr. 2003 à 23:16
salut ...
J'ai vu ton code et il me pose un petit problème ..... L'utilisation des resources system en effet ce dernier parait vraiment tres mais tres gourmant ..... autre chose si t'a une doc sur les threads et ses fonctions telles que CriticalSection passe les moi ... merci !!!
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 30 janv. 2003 à 20:51
ds le zip, main.cpp contient un exemple non ?
cs_deedje
Messages postés8Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 9 août 2003 30 janv. 2003 à 09:36
Salut,
As-tu un exemple d'utilisation de ta classe ? C'est quand même plus facile pour comprendre le fonctionnement....
Merci :))
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 15 janv. 2003 à 17:23
np ;)
NerOcrO
Messages postés33Date d'inscriptionmardi 10 octobre 2000StatutMembreDernière intervention27 mai 2004 15 janv. 2003 à 16:26
Merci ma couille, j'attendais ça depuis longtemps.
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 14 janv. 2003 à 19:11
wep, dsl je ferais ca la prochaine fois
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 14 janv. 2003 à 18:27
ca orrai été bien ke tu mettre tous les fichier du projet pour Vc++ dans ton zip...
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 14 janv. 2003 à 08:22
merci :)
ah ! oui c possible que je me sois aussi un peu embrouiller avec les CriticalSection...
24Karas
Messages postés233Date d'inscriptionjeudi 4 juillet 2002StatutMembreDernière intervention 5 juillet 2008 13 janv. 2003 à 23:38
ça à l'air pa mal du tou : FELICITATION :)
g pa testé mais je m'empresse de le faire ...
Bon courage pour la suite
@++ 24KaraS
20 janv. 2007 à 21:06
20 janv. 2007 à 20:54
je me suis inspiré de ton code pour coder un serveur multi clients sur un seul thread mais je le problème qui a été évoqué ci dessus : wsawaitformultipleevent boucle et bouffe 100% proc. comment a tu fais pour régler ce problème et être bloquant dans l'attente d'un évènement ?
Merci d'avance?
27 mai 2005 à 10:47
Malheureusement cette valeur est statique, définie a la compilation.
Je ne connais pas l'implémentation des fd_set, mais je suppose que ca doit etre un tableau. Aussi définir une trop grande valeur par rapport au nombre de clients potentiels pourrait nuire aux performances par exemple.
Ca ne permet donc pas une gestion souple du nombre de clients :(
26 mai 2005 à 15:07
26 mai 2005 à 15:07
13 nov. 2004 à 22:39
Quand on est conecter avec ton client et ton server, peut t on se voi en reseau avec un pot, c a d par exemple se voir dans les jeux ?
12 août 2004 à 12:25
winsock functions: select()
je cite "Four macros are defined in the header file Winsock2.h for manipulating and checking the descriptor sets. The variable FD_SETSIZE determines the maximum number of descriptors in a set. (The default value of FD_SETSIZE is 64, which can be modified by defining FD_SETSIZE to another value before including Winsock2.h.)"
10 juin 2004 à 16:59
Un grand grand merci !
16 mars 2004 à 10:31
En tout cas ça fonctionne trop bien avec 60 clients
Vraiment très bon code
je mets 10/10
21 nov. 2003 à 15:52
- créer une fenetre (invisible, juste pour ses messages) et faire passer les "evenements" des sockets asynchrones par cette fenetre. avantage : un seul thread créé, limitation du nombre de clients théoriquement a la limite de la machine/système
inconvenient : une application qui utiliserait ce module pour sa gestion du reseau serait plus facilement attacable avec un "hook" de la "callback" de la fenetre (facile a réaliser), ce qui permettrait de recevoir les messages des sockets.
- créer un gestion de thread qui crée un thread tout les 64 clients qui attendent chacun les evenements de 64 sockets.
avantage : plus difficilement attacable a ma connaissance.
inconvenient : ca peut devenir tres lourd s'il y a beaucoup de clients ...
qq1 saurait quelle méthode choisir, ou verrait une autre possibilité ?
merci :)
21 nov. 2003 à 01:39
cf netword.h et network.cpp (et status.h et status.cpp)
normalement ca devrait bien tourner ensemble.
(j'y ai d'ailleurs répondu deja un peu plus haut ...)
sinon je grace a la magnifique source de BigInt qui a été posé récement je suis en train d'implémenter la possibilité de créer une connexion cryptée, puis je pense aussi rééecrire cette source, ainsi qu'un client en utilisant les std::string du c++ et la stl (std::vector, p-e d'autres).
21 nov. 2003 à 00:58
Enfin, si c'est possible.... je sais que c'est pas beau de réclamer ;)
MzF
21 nov. 2003 à 00:53
That Is the question....
En tout cas, ça fonctionne pas mal, merci pour ce code ;)
MzF
20 nov. 2003 à 19:09
20 nov. 2003 à 17:45
Un autre truc, je suis obligé de mettre une pause entre 2 Send à des clients différents... Sleep 100, sinon mon 2ieme message n'est pas envoyé...
Voili voilou,
Merci de vos réponses
A+
MzF
29 sept. 2003 à 18:21
29 sept. 2003 à 17:54
29 sept. 2003 à 08:57
Je disais donc, il n'y a aucun backslash! Mais je retire ce que j'ai dis car c le site qui les a enlevé, sorry!
29 sept. 2003 à 08:54
29 sept. 2003 à 00:51
28 sept. 2003 à 13:56
c la ligne 614 de network.cpp
dans la fonction "CNetServer::ThreadEntry(CNetServer* MyServ)"
et dans le cas ou ca bug MyServ = 0x0000003e ^^
28 sept. 2003 à 13:51
le log du debugguer :
'test.exe' : Chargé 'E:Visual Studio Projects estRelease est.exe', Les symboles ont été chargés.
'test.exe' : Chargé 'C:WINDOWSsystem32
tdll.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32kernel32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32ws2_32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32msvcrt.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32ws2help.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32advapi32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32
pcrt4.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32mswsock.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32wshtcpip.dll', Aucun symbole n'a été chargé.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Le thread 'Thread Win32' (0x8d4) s'est arrêté avec le code -1073741510 (0xc000013a).
Le thread 'Thread Win32' (0xbc8) s'est arrêté avec le code -1073741510 (0xc000013a).
Le programme '[2544] test.exe: Natif' s'est arrêté avec le code -1073741510 (0xc000013a).
voila et encore bravo!!!
11 sept. 2003 à 17:56
sinon, pour le fantôme, je vais jeter un coup d'oeil ...
11 sept. 2003 à 10:38
Faudrait une solution pour gérer les timeout sur les connex clients, car qd un client plante, son "fantôme" reste malgré tout connecté pour le serveur. Ca devient très embetant si le serveur tourne non-stop... à la longue... fin au risque de me répeter, tu risques de remplir ta mémoire inutilement lol... et surtout.. blablabla 'fin tu vois la merde quoi ;-)
10 sept. 2003 à 22:34
C'est cool d'aider tant de gens par ton travail sur ce code !
24 juin 2003 à 14:04
http://www.cppfrance.com/article.aspx?Val=1567
c'est un exemple de bot irc, il utilise une classe qui peut faire client de ce serveur.
24 juin 2003 à 12:53
23 juin 2003 à 18:02
10 juin 2003 à 09:35
merci pour le 'petit détail' :) je corrigerais qd j'aurais le tps :)
10 juin 2003 à 08:27
Ton serveur est nickel, tu as juste oublié un petit détail: quand un client se déconnecte, n'oublie pas de nettoyer les éventuels messages qu'il aurait pu y laisser, sinon tu risques de remplir, à la longue, ta mémoire inutilement!
Bien a toi, hooo dieu! ;-)
20 mai 2003 à 09:45
20 mai 2003 à 09:44
Merci de la remarque :)
20 mai 2003 à 09:33
Juste une remarque, si tu permets, j'ai eu l'occasion de développer un serveur IP et pour éviter l'utilisation d'un nombre de thread égal au nombre de clients j'avais,à l'époque, utilisé la technique des "I/O Completion Ports" qui donne les résultats tout à fait exceptionnels.
7 mai 2003 à 16:34
2 mai 2003 à 16:23
http://www.cppfrance.com/article.aspx?Val=1775
29 avril 2003 à 09:53
j'avais fait un serveur http en java mais c plus facile avec java
mais comme mon langage de prédilection est le c++ sa le fais bien que tu es fais sa, sa va m'aider a faire très vite des applis en reseau.
je vais chercher pour les events, j'avait pas trop eu de mal avec sa sur mon serveur...
@+
26 avril 2003 à 11:58
désolé pr l'impertinence de ma remarque, ce n'est pas tout à fait ce que je voulais dire.
je suis avec intérêt l'évolution de ce serveur.
dès que tu auras progressé, fais le nous savoir.
bonne chance pour le développement et n'hésite pas à demander un coup de main.
++
24 avril 2003 à 10:07
merci
24 avril 2003 à 10:06
merci
14 avril 2003 à 22:53
sinon je taff en ce moment sur la correction du bug des ressources par les events ...
14 avril 2003 à 20:37
dechire je galere un peu sur le thread, ce source est franchement cool pour ca, je met 10 directe, car tu t'es bien casser le cul je trouve franchment MERCI !!!
15 mars 2003 à 09:54
cependant, est ce qu' il est possible que tu mettes online un chti client ? histoire de voir comment le tt fonctionne...
25 févr. 2003 à 10:19
24 févr. 2003 à 22:00
sinon merci pour cette breve explication (lol) et sinon utilise les event pour corriger cette source .. bon courage ... ;)
24 févr. 2003 à 09:29
donc, une critical section sert pour le multithread, pour eviter qu'un thread accede à un emplacement mémoire en mm tps qu'un autre.
par exemple ds ce source, le status du serveur peut etre lu/changé par les fonctions du serveur (qui ne sont p-e pas toutes executé par le mm thread), et le thread de gestion des sockets. ainsi, quand un thread veut lire en changer cette variable, il demande à "owner" la critical section. un seul thread peut "owner" la critical section en mm tps, aussi si un autre l'own deja, le thread attend (EnterCriticalSection ne retourne que qd elle a pu owner la CS). donc, une fois que le thread own la critical section, il sait qu'il est le seul a pouvoir accéder à la variable, donc pas de risque de lecture/ecriture simultanée. une fois qu'il a fini, il rend l'own de la critical section avec LeaveCriticalSection, pour qu'un autre thread puisse a son tour l'owner.
voila :)
sinon, g entendu parler des mutex aussi du mm style, sauf que la ca peut aussi fonctionner entre processus, et pas seulement entre threads d'un mm processus.
24 févr. 2003 à 09:22
23 févr. 2003 à 23:16
J'ai vu ton code et il me pose un petit problème ..... L'utilisation des resources system en effet ce dernier parait vraiment tres mais tres gourmant ..... autre chose si t'a une doc sur les threads et ses fonctions telles que CriticalSection passe les moi ... merci !!!
30 janv. 2003 à 20:51
30 janv. 2003 à 09:36
As-tu un exemple d'utilisation de ta classe ? C'est quand même plus facile pour comprendre le fonctionnement....
Merci :))
15 janv. 2003 à 17:23
15 janv. 2003 à 16:26
14 janv. 2003 à 19:11
14 janv. 2003 à 18:27
14 janv. 2003 à 08:22
ah ! oui c possible que je me sois aussi un peu embrouiller avec les CriticalSection...
13 janv. 2003 à 23:38
g pa testé mais je m'empresse de le faire ...
Bon courage pour la suite
@++ 24KaraS