P2P avec WSAasyncselect

Résolu
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007 - 14 mars 2006 à 16:49
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 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 ?

5 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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.
3
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Derniè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é.

Bonne prog.

http://vbaddons.free.fr

if (CPossible)
0
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 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.
0
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 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
0
Rejoignez-nous