TUTORIAL WINSOCK TCP/IP PAR L'EXEMPLE

thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 - 18 mars 2004 à 17:39
c_ferrari Messages postés 1 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 31 août 2010 - 31 août 2010 à 14:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21301-tutorial-winsock-tcp-ip-par-l-exemple

c_ferrari Messages postés 1 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 31 août 2010
31 août 2010 à 14:53
Bonjour
C'est très facile fait et expliquer. C'est bon base pour commencer et donner d'Idée.
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
24 mars 2004 à 13:51
pour Starfighter, et les autres utilisateurs bien sur, j'ai mis en ligne un petit exemple d'une liste de type FIFO sans drapeau qui a resolu mon probleme cite precedemment.
http://www.vbfrance.com/code.aspx?ID=21415
etgenio Messages postés 2 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 20 juin 2007
24 mars 2004 à 12:02
Bien, très bien et surtout facile à modifier pour réalier d'autres applications Serveur-Clients !
Merci
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
19 mars 2004 à 12:07
Tres clair starfighter, je vais y réfléchir et tester, en tout cas je suis persuadé que tu t'approche de la vérité.

Merci.
cs_starfighter Messages postés 90 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 28 février 2005
19 mars 2004 à 10:00
1 - Lorsque tu fais Winsock_SendData pour ton client, tu met le drapeau a occupé, lorsqu'il a traite la demande tu met le drapeau a libre

2 - Lorsque un client te fais une demande tu regarde si ton drapeau est libre, si oui tu accepte sa demande et tu vas a l'etape 1 sinon, Tu ajoute dans la file d'attente cette demande

3 - le serveur des qu'il a operer sur une demande scan la file d'attente et effectu le traitement de l'étape 1 (ce scan peut être effectue par un Timer qui regarde si le drapeau est libre si oui, il traite la demande sinon il continu a attendre.

j'espère que c'est clair.
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
19 mars 2004 à 09:46
Je vous remercie de tous ces conseils et du temps que vous y passé, j'ai deja fait beaucoup de test avec les DoEvents en les mettant à la fin, au debut apres le senddata de mon serveur et toujours probleme.
Etend donné que je fais des transferts sans timer,c'est très rapide, par contre je pense qu'il faut que je traite le probleme sous forme de liste, ce serai peut être la solution pusique le serveur traiterai les demandes a son rythme.

POUR starfighter
Pourrais tu me donner plus de détail à ton explication.
Merci.
cs_Pat35 Messages postés 59 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 5 décembre 2007
19 mars 2004 à 09:11
Pour thierrydelepine :

Le DoEvents est à mettre une fois que tu as traité la demande (juste après le SendData en fait). De cette façon, en théorie, le système transmet les messages non traités sans libérer la socket qui était active. Tu devrais donc recevoir le DataArrival de la part des autres clients ouverts et pouvoir les traiter avant que le premier client ne te refasse une demande.

Si ça ne marche pas, ou si tu avais déjà essayé, je ne voie plus qu'ouvrir une socket en UDP pour les transferts de donnés importants.

Pour jp50 :

Essaye de faire un package d'un prog qui intègre WinSock et installe le sur ton portable, ça devrai l'enregistrer proprement dans le système.
cs_jp50 Messages postés 45 Date d'inscription samedi 14 avril 2001 Statut Membre Dernière intervention 3 janvier 2008
19 mars 2004 à 02:15
J'ai un portable qui n'avait pas internet d'installé quand on l'a acheté. J'ai installé internet, mais winsock n'est pas installé. Si je le copie de mon autre ordinateur il donne une erreur. Est-ce que quelqu'un sait ou telecharger winsock. J'utilise win 98.

JP50
cs_starfighter Messages postés 90 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 28 février 2005
18 mars 2004 à 20:33
Bonjour a tous,
Utilise un drapeau avec une file d'attente
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
18 mars 2004 à 18:02
J'ai deja fait des tests en mettant un DoEvents, le problème c'est que le DoEvents dit a mon appli de gerer les evenements WINDOWS, donc si un autre client fait un SendData, c'est un evenement, donc le Winsock_DataArrival traite la nouvelle demande, mais n'a pas traité la demande qu'il etait en train de traiter avant de lancer le DoEvents. Donc du coup le serveur ne traite plus rien car si le flux est continu avec plusieurs clients chaque appel a DoEvents fait que le client repart au debut de la Sub Winsock_DataArrival mais sans traiter la demande precedente. J'espere avoir été clair dans mon explication.
cs_Pat35 Messages postés 59 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 5 décembre 2007
18 mars 2004 à 17:51
Tous d'abords merci pour la note, ça fait toujours plaisir.

Pour ton problème, essaye de mettre des "DoEvents" après chaque lecture ou écriture sur la socket si c'est pas déjà fait.

Je suis pas tombé sur un cas de blocage comme ça, mais en faisant mes recherches, j'ai vu que ça pouvait être la solution a ton type de problème.
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
18 mars 2004 à 17:39
Cet exemple est tres bien fait, commenté. 10/10
J'ai une petite question auquel je suis confronté sur une appli multi client peut être aura tu une idée.
j'ai parfaitement reussi a faire dialoguer plusieurs clients avec un serveur mais cela marche bien tant que les donnees echangés on un débit limité (par exemple echange de texte dans un chat ) par contre si je transfert des fichiers en flux continu ( des que le client recoit le packet, il redemande de suite un nouveau packet au serveur) et bien là, mon serveur ne repond plus qu'au client qui telecharge, les autres clients peuvent ouvrir une connexion avec le serveur sans probleme mais les senddata qu'ils font ne sont pas traités par le serveur ???

Si tu as une idée ou un autre utilisateur, je suis preneur.

Merci d'avance.