JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007
-
14 mars 2006 à 16:49
JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007
-
15 mars 2006 à 02:31
Salut,
je suis en train de realiser un petit systeme p2p et pour ca j'ai un serveur dedié DS, un client C1 et un client C2 qui ont le meme code.
C1 et C2 se connectent au port 4200 du DS.
Ensuite suivant ce qu'aura décidé le serveur dédié ce sera soit C1 soit C2 qui se connecteront l'un a l'autre.
Pour ca mes clients se connectent entre eux sur le port 4300.
J'utilise alors WSAAsyncSelect(sock_client, hwnd, WM_SOCKET, FD_CONNECT | FD_CLOSE | FD_READ | FD_WRITE); pour ma connection au serveur et pour mes clients c'est WM_SOCKET2.
Ainsi je gere les paquets différament et c'est plus clair.
Est-ce une bonne démarche ? N'y aura t il pas de conflits dans les messages ? y a t il d'autres methodes sachant que je n'ai qu'une fenetre dans mon programme ?
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 15 mars 2006 à 01:31
Salut,
En fait quand tu recois un message WM_SOCKET ou WM_SOCKET2, le wParam
est le socket qui a généré cet évenement, donc il n'y a aucune
ambiguité pour savoir de quelle connection l'event provient. On peut
donc gerer plusieurs dizaines de socket avec un seul message, mais
c'est vrai qu'utiliser plusieurs messages c'est plus pratique.
Pour info, eMule utilise WSAAsyncSelect(), et gere plusieurs centaines
de socket sans probleme. Un point interessant, c'est que chaque socket
possede son propre message de notification, pour des raisons pratiques.
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 14 mars 2006 à 18:03
Comme c'est un client P2P, pour transférer des fichiers je suposes tu devrais peut-être regarder du côté des threads puisque chaque client demandera une ressource gourmande. Malheureusement, il n'y semble pas avoir beaucoup d'expert dans la matière. Des sockets blocant serait peut-être approprié.
JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007 14 mars 2006 à 21:20
Non ce n'est pas un P2P gourmand (8 personnes, pour commencer et ca ira maximum a 16) et chaques clients fait au maximum deux connection (la connection permanante avec les DS) et une conection/deconnection de temps en temps avec un client.
Ce qui demande beaucoup de ressources c'est le nombre de connections, ici avec 2, je pense que les WSA feront bien l'affaire.
JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007 14 mars 2006 à 21:36
Je vais reformuler ma question differement :
Est-ce qu'il est possible de faire 2 appel : 1 à connect() et 1 accept() ou ou 2 connect() (non-bloquant) avec wsasyncselect en utilisant comme parametre WM_SOCKET pour les messages entre client-serveur et WM_SOCKET2 pour les messages client-client ?
lorsque du cote client je recevrais F_READ, de WM_SOCKET je saurais alors que ca viens du serveur. Idem WM_SOCKET2 pour client.
Quelqu'un a t il deja fait ca, est-ce la procedure ideale ? ou existe il un autre moyen sans passer par les trhread si possible.
Au pire je teste demain mais comme je n'ai qu'une machine, deja que c'est tordu alors si en plus je fais du multiconnect sur la meme ip :D
merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007 15 mars 2006 à 02:31
En effet, pas d'ambiguités, j'ai testé et ca fonctionne impecable !
Je pensais que WSAAsyncSelect aurais du mal a se lancer deux fois de suite sur le meme handle mais en fait aucun problemes :)
Je savais pas pour emule, ca me donne des ailes :p
merci pour la reponse, encore :D