TUTORIAL WINSOCK TCP/IP SERVEUR CLIENT , MULTI CLIENTS ETC , CE KI FO SAVOIR QUO

cs_jeanyves Messages postés 57 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 24 mars 2003 - 28 sept. 2002 à 06:35
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 9 déc. 2009 à 01:54
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/4644-tutorial-winsock-tcp-ip-serveur-client-multi-clients-etc-ce-ki-fo-savoir-quoi

cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
6 juil. 2003 à 06:40
merci FuSe! cela ma éclairer...je t'en remercie
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
7 juil. 2003 à 07:06
pendant kon es dans ce sujet, c koi la commande pour exécuter une commande stockée dans une variable....
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
7 juil. 2003 à 19:36
Bonne question Nargzul.....j'aimerais moi aussi savoir la réponse!
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
7 juil. 2003 à 20:09
FuSe vient de donner une réponse satisfaisante à ce problème...
En programmation, ça ne se fait pas d'exécuter une commande contenu dans une variable. Ce n'est pas propre du tout de faire comme cela ! (car très dur à maintenir puisqu'on ne sait pas vraiment l'instruction qui est contenu dans la variable au niveau du code source).

Ce qu'on fait, c'est qu'on met un message dans cette variable de sorte qu'après, quand on interprète le contenu de la variable (avec un Case par exemple), alors on fait tel ou tel instruction.

Par exemple :
On a une variable v de type String.

Quand on veux faire une action en fonction du contenu de v, il suffit d'interpréter v.

Select Case v
Case "Action 1"
'L'action est exécuté ici
Case "Action 2"
.........
.....
End Select

Donc, pour résumé, on n'exécute pas l'instruction contenu une variable, mais on exécute une instruction en fonction du contenu de la variable (en l'interprétant).

Il se peut dans des cas très particuliers que vous ne puissiez pas faire autrement que d'exécuter l'instruction contenu dans la variable, mais dans ce cas très très limité, je ne sais pas comment faire... (et je pense qu'il y a toujours moyen de faire autrement).
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
7 juil. 2003 à 23:10
Bonjour à tous !
Problème du jour, et épineux problème, comment exécuter une instruction contenu dans une variable au format chaine.
Ma réponse de développeur professionnel débutant VB6 ;) , c'est impossible. Ou plutot non disons presque réalisable !

Ceux qui voudront s'y essayer, je ne connais QU'UN SEUL MOYEN, et c'est le suivant, suivez la procédure :

1) ouvrez un nouveau projet standard, avec une form Form1 toute bête
2) ajoutez le composant Microsoft Script Control et placez en un sur la Form1, ce sera le ScriptControl1
3) mettez aussi une TextBox Text1 pour faire le test que je vous propose
4) dans le form_load, tapez ScriptControl1.AddObject "Form1", Me, True
5) mettez un bouton avec le code suivant au clic : ScriptControl1.ExecuteStatement "text1.text=""coucou"" : msgbox ""Alors content ? ;)"""
6) lancez le projet et cliquez sur le bouton
7) observez votre textbox, lisez la msgbox
8) alors ? compris !?

C'est excellent comme astuce, ca marche très très bien mais il est vrai que ca ne marche pas avec des fonctions tres pointus de VB mais pour executez des procédure ou des fonctions ca marche aussi DONC vous pouvez TOUT FAIRE avec ca.

commentaires ?

@+ et merci pour l'intérêt que vous portez à cette source, ou disons ce tut', ca fait plaisir à son auteur ! on dirait un petit forum ! lol ;)
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
7 juil. 2003 à 23:35
j'ai ajoutez une source pour en faire profiter toute la communauté avec un zip d'exemple, RDV ici :
http://www.vbfrance.com/article.aspx?Val=9630
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
7 juil. 2003 à 23:53
bien vu... ;)
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
8 juil. 2003 à 03:01
Wow!! quel génie tu es celiphane!!
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
8 juil. 2003 à 09:44
heu???
c'est de l'ironie que je sens là ? ;o
@+
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
8 juil. 2003 à 13:23
g un problème, ya surement au moins qqun ki peut m'aider, je ne recois pas ce ke je m'envoie:

voila ce ke g:

sur command3
messtosend = "P " + client.LocalIP
client.SendData (messtosend)

sur client.dataarrival de l'autre form
client.GetData Data
commande = Left(Data, 3)

après j'ai un select pour les différente opérations possible, mais il ne fait rien, en après g été regarder ce qu'il y dans commande, juste apès qu'on lui aie entré une valeur, et cette valeur c "???" pourquoi? j'ai regardé le message juste avant que je l'envoie, c une chaine de caractère tout ce qu'il y a de plus normal...

help me please
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
8 juil. 2003 à 13:49
Il faut interpréter ce que tu reçois...
Quand tu envoi une chaine, en réalité, c'est un flux binaire (de 0 et de 1) qui est envoyé...
Et donc, à la réception, il fau tinterpréter le flux reçu en le plaçant dans une String.

Quel est le type de ta variable Data et de ta variable commande ?
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
8 juil. 2003 à 13:54
et comment tu fais pour interpreter

mes variables sont définie en tant que string....
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
8 juil. 2003 à 18:46
celiphane! ce n'étais pas de l'ironie....il faut vraiment etre intelligent pour trouver plein de solution comme ca!
cordialement...ton ami vinc
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
8 juil. 2003 à 19:04
Nargzul> étrange en effet, je ne peux que te recommander de suivre le tutorial de ligne en ligne, car le problème vient surement d'une bête (comme toujours) erreur de saisie, d'un oubli ou autre... par exemple, vérifie bien ton select case sur quoi il porte etc... aussi, utilise plutot le & que le + pour concaténer une chaine, le + c'était pour la compatibilité avec Qbasic !

vinc> alors merci, c'est tout content que je reçois cette gratitude et cette qualification. Au fait on se connait déjà ? (j'ai la mémoire TRES courte)
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
9 juil. 2003 à 06:40
Non , on ne ce connait pas...mais j'ademire beaucoup ceux ki ont un grand talent en ordinateru et surtout en programmation!

et a ce que j'ai pu voir tu as un énorme talent en programmation..félicitation...en espérent que je devienne un jour comme toi!
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
9 juil. 2003 à 06:55
vous voulez savoir ce ke g fait pour ke ca marche???





suspens...
g redemérré le pc... ahhh. les mystère de l'informatique...
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
9 juil. 2003 à 07:24
hooooooo........alors le génie de céliphane n'en prend une claque!!!

petit joke haha!!
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
9 juil. 2003 à 07:31
en passant!....sa pas rapport avec le winsock...mais ....sur la page daccueil de vbfrance....cest koi sa : vos points: 14 point sur vbfrance au total??? et comment on fait pour avoir cest point la? et a koi sa sert?
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
9 juil. 2003 à 07:36
cda sert à rien, c en fonction du nombre de source ke tu as, et des message ke tu as mis sur le forum...
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
9 juil. 2003 à 07:39
ok merci!
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
11 juil. 2003 à 15:52
ha ok, moi aussi ca m'éclaire pas mal comme explications sur les points attribués :
en gros si t'es un gros floodeurs t'es considéré comme le meilleur auteur de vbfrance, mais si par contre t'es parmi les sources favorites de la communauté, t rien. Sympa le classement ;)
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
11 juil. 2003 à 15:55
ben en fait, je crois, mais je suis pas sur... et pis je sais pas si on peut dire considéré, pq ya personne d'autre que toi ki vois ca...

de toute facon, c pas trop au points ke tu juge le programmeur, c plutot avec ses codes... je crois ke ya tout le monde ki est d'accord
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
11 juil. 2003 à 17:11
ho non mais t'inquiete pas je ne m'en formalise pas ! c'était de l'humour c'est tout !
lol
@+
cs_dtom Messages postés 30 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 16 novembre 2003
18 juil. 2003 à 01:41
celiphane, to tutoriel est très bien et je n'est rien à lui reprocher(meme si je n'est ai pas eu besoin personnellement), meme pas le service après vente ;-). mail j'ai entendu dire que le control winsock n'était PAS compatible avec windows xp.
je cherche donc désepérément une aide complette sur les api winsock.
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
18 juil. 2003 à 08:31
Le control Winsock est tout à fait compatible avec XP.
D'ailleur, si tu regardes dans le repertoire System32 de XP, tu trouveras le controle OCX Winsock.
Par contre, si tu fais du Client/Serveur sur la même machine (pour tester ton appli de Chat sur 1 seule machine par exemple), il se peut que ça ne marche pas... j'ai déjà vu ce cas de figure chez des clients...

Après, est-ce que cela vient de XP, peut-être, mais en tous cas, ça marche...
Je te conseil d'utiliser l'ocx plutôt que les API, car ça ne sert à rien de perdre du temps à réinventer la roue !
Le controle Winsock utilise lui même les API Winsock...
A moins que tu veuilles faire quelque chose de très spécifique...
Dans tous les cas, si tu as besoin de performance dans ton appli, il faudra abandonner le VB et passer aux Sockets du C++... mais c'est une autre affaire...

Bon courage...
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
23 juil. 2003 à 01:48
Il y a tu un moyen de mettre un idex sur une form??? car je voudrais deux fois ma form1
cs_vinc Messages postés 32 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 11 octobre 2003
23 juil. 2003 à 07:07
Autre chose que je comprend pas!! dans form_resize() tu a decris for each object in me

si jecrit sa dans une autre form sa marke que la variable object nest pas déclaré....mais toi dans ta form tu ne la déclare nul part....comment ca, ca marke ca???
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
23 juil. 2003 à 09:26
Salut,

I]
non, pas d'indiçage pour les form, mais par contre, tu peux les gérer comme objets dans une collection !
créé une collection : public CollForm as new collection (dans un module)
créé aussi cette sub :
public sub AjouteForm
dim F as new [tafeuille]
CollForm.add F
set F=nothing
end sub

Après tu accèdes aux feuilles simplement avec CollForm(1), Collform(2) etc...


II]
le form_resize de mon tutorial je ne le vois pas ! pose tes comments sur les bonnes sources. Je vois de quoi tu parles :
2 solutions possibles :
1) tu déclare la variable object comme Object (appelle la simplement O pour faire + propre [dim o as object]
2) retires ton Option Explicit qui SUREMENT dans ton code ;)


@+
Celiphane
cs_jacques34 Messages postés 8 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 7 avril 2004
23 juil. 2003 à 12:56
Désolé, je dois être le plus nul de tous !
pour moi :
La partie mono-connexion de ton tutorial fonctionne !
Mais pas la partie multi-connexion ?
Pourrais-tu m'envoyer le code complet de ta Form ( et les Objets)
Par avance , merci.
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
23 juil. 2003 à 14:22
jacques34,
on n'est pas nul quand on ne comprend pas tout du premier coup, on l'est quand on arrive à rien de rien, et qu'on fait consciemment n'importe quoi pour y parvenir.
Tiens, voici 2 de mes sources, certes complexes et très axées, mais qui devraient répondre à ton besoin :

http://www.vbfrance.com/article.aspx?Val=3474
http://www.vbfrance.com/article.aspx?Val=6704

sans forcément les exécuter et les comprendre de A à Z, tu retrouveras en winsock des éléments de ce tutorial et je pense que tu tilteras tout seul. Pour bien faire, suis le tuto en regardant les sources.

@+
Celiphane
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
23 juil. 2003 à 14:57
T'es un vrai pédagogue Céliphane... Tu n'es pas être prof par hasard ?
(ce n'est pas ironique)...
C'est vrai qu'en info, il faut aller à l'essentiel, car c'est extrèmement vaste. On ne peut pas tout comprendre... Il faut comprendre dans la globalité le concept puis descendre dans les couches plus techniques si besoin est...
Retenez bien que dans la programmation, l'important, c'est le concept, l'idée de base... Après, le code, c'est de la pure recette de cuisine ;)...
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
23 juil. 2003 à 16:51
jockos, les autres, vous êtes nombreux à me le demander : non je ne suis pas prof, et ça se sent dans mes phrases lol ;)

si par contre l'un d'entre vous aurait une proposition de professeur informatique à me proposer et bien rémunérée 8-), alors n'hésitez pas lol

plus sérieusement, je développe actuellement pour une société prestatrice de service informatique. Voilà c'est dit.

et pendant que j'y suis, je te remercie, toi jockos, pour ta participation sur les commentaires de ce tutorial, toujours précieuse. Toi, tu as l'air d'être un bon, et un bon connaisseur aussi. Merci aux autres aussi.

@+
Celiphane
cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010
27 juil. 2003 à 14:43
J’ai réalisé un programme de chat avec Winsock qui fonctionne bien. Par compte, on doit donner son IP au «client » pour ce connecter qui n’est pas terrible.

Comme la personne ne connais pas le IP du « serveur », il devra scanner 000.000.000.000:4000 à 999.999.999.999:4000, jusqu’à qu’il soit accepté ?

C’est très long Grr!! ????

Je ne vois pas de solution car mon IP change et je ne suis pas forcément connecté.
Ci la personne que je ne connais pas, lance mon programme « serveur » car il n’a pas trouvé de « serveur ».
Comment je peux me connecter sur son « serveur » ci je ne le connais pas ?
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
27 juil. 2003 à 18:27
lol !
JCpp> je vois que tu commences à utiliser Winsock, et je vois surtout que tu commences seulement à t'initier au réseau.

D'une part, une adresse ip est constitué de 4 octets, ainsi elle est borné par 0.0.0.0 et 255.255.255.255, moins les réservé (comme la localhost 127.0.0.1 par exemple).

D'autre part, si ton IP change, c'est normal : c'est sécurisant, et c'est techniquement plus simple pour ton FAI. Tu imagines devoir scanner toutes les IP, tu es un pirate ? ;)

Ce que tu exprimes est impossible, c'est comme une grand-mère qui demande à un vendeur si son futur PC fera le café expresso !

Ce qu'il te faut, c'est acheter une place pour placer un serveur sur la toile, fixe, et résolu par DNS. Personnellement je n'en ai pas les moyens !

Enfin, j'avoue que j'ai bcp de mal à exprimer ce que je ressens face à ce genre de commentaire (c'est pas du tout méchamment hein !), mais j'espère que des esprits plus éclairé que moi sauront mieux t'éclairer sur la lune que tu recherches !

@+
Celiphane
cs_FuSe Messages postés 18 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 10 juillet 2003
27 juil. 2003 à 18:34
Salut Jcpp,
Ce que tu veux est assez difficile a faire comme le dit Celiphane et comme tu l'a remarqué c'est tout à fait impossible de scanner toutes les ips qui peuvent exister (question de temps et bon c'est un peu fastidieux comme opération ).
Pourtant ta question m'amène à penser qu'il doit pourtant bien y avoir un moyen : je pense par exemple aux jeux réseau lorsque on est uniquement sur un LAN => il n'y a pas de serveur pour centraliser et pourtant on a un listing des serveurs ouverts...

Mais bon là je sais pas du tout comment ça marche...

A+
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
27 juil. 2003 à 19:12
La résolution de nom (DNS) sert entre autre à cela.
L'idée, c'est de posséder un nom de domaine Internet Fixe correspondant à ton adresse IP dynamique.

Va voir sur ce site : http://www.dyndns.org/account/create.html
Tu pourras créer ton nom de domaine gratuitement.

Après, il faut quand tu te connectes à Internet que tu lances un petit soft qui te permettra de faire la liaison entre ton adresse IP fournit par ton FAI et ton nom de domaine fixe t'appartenant.

Ainsi, ton serveur aura un nom de domaine que tout client devra connaitre pour se connecter au chat.

Bon courage
cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010
27 juil. 2003 à 20:12
Merci, d’avoir répondu jockos, FuSe et bien sur celiphane.

Je voudrai réaliser un chat comme Messeger, IRC, ICQ, etc.… pour ma Jenny (programme iA)

http://perso.wanadoo.fr/iar/IAb_Images.htm

Comme cela, Jenny pourrai apprendre en même temps que l’on chat et elle donnerai son opinion, etc.

Je pensai a un truc, ci je connaissais un IP avec son port « serveur » d’un chat existant qui fonctionne tout le temps, le problème sera résolu.
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
27 juil. 2003 à 21:13
FuSe> en ce qui concerne les jeux en réseau qui "auto-trouvent" les serveurs ouverts, EN LAN LOCAL BIEN SUR (d'ailleurs, Local Aera Network pou LAN hein), j'ai mon idée.
en fait si je devais faire un truc comme ça, je me baserai sur ce principe là : une LAN, c'est des pc branchés sur un même réseau, appartenant au même réseau, c'est à dire tous avec l'ip A.B.C.X où A B et C sont tous les mêmes ! Seul X varie.
Ceci limite le scan à 255 valeurs, moins les réservés (0 j'en suis sûr et 255 je crois aussi ?) : c'est ce petit temps de latence pendant la recherche, fort court mais existant. Fortement probable non ?
D'ailleurs, j'ai déjà essayé, deux réseaux différents, genre A.B.X.Y relié par un pont, le pc de l'un trouve ceux de son réseau mais pas les autres, dans un jeux en autosearch, alors que dans windows on peut lister tous les postes des 2 réseaux. Probant !

jockos,FuSe> merci ;)

JCpp> bon courage !

@+
Celiphane
cs_walk Messages postés 3 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 29 juillet 2003
29 juil. 2003 à 09:47
Merci pour ce tuto, moi newbie total j'aime bien, et je comprend mieux mon boulot.
Pour le lan, il te manques des trucs.
tout d'abord, je voulais souligner la différence entre TCP et UDP, tous les deux protocoles de la couche 4, il faut savoir qu'UDP fonctionne sans aquitement alors que TCP attends l'aquitement pour envoyer la suite de ses paquets... Voilà pour ca.
Ensuite pour les @ IP des réseaux, elles sont classées en trois catégories, c'est ici qu'il te manque des trucs celiphane
Classe A: 1.0.0.0.0 à 126.255.255.255
classe B: 128.0.0.0 à 191.255.255.255
classe C: 192.0.0.0 à 223.255.255.255
Classe D: 224.0.0.0 à 239.255.255.255
Sachant qu'il existe des plages résevées:
127.0.0.0 loopback
classe D réservé au multicast, et les adresses en X.255.255.255, X.X.255.255 et X.X.X.255 sont des adresses de broadcast.
Le reste des adresses, la classe e est expérimentale. Enfin, il ne faut pas oublier que dans chacune des classes existe des plages d'adresses privées non routées sur Internet comme la plage 10.0.0.0.
Voilà, donc il te manque des adresses pour ton calcul.
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
29 juil. 2003 à 10:13
Il faut aussi préciser pour être complet que UDP ne fait pas le réordonnancement des paquets reçus !
C'est à dire que quand les paquets arrivent dans le désordre, il faut les remettre dans le bonne ordre afin de lire le message envoyé tel qu'il était.
Il faut donc quand on utilise UDP utilisé un p'tit protocol pour faire cela. (protocol de niveau applicatif ou juste au dessus de la couche transport du modèle OSI).

Bref, ne vous galérez pas à utiliser UDP sauf pour des applis très spécifiques comme la vidéo conférence ou la téléphonie IP (dans ce cas, on utilise le protocol RTP qui se situe juste au dessus de la couche Transport, donc juste au dessus d'UDP).
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
29 juil. 2003 à 12:31
Parfait parfait, voici de nouvelles infos toutes fraiches pour les futurs Newbies qui viendront s'inspirer de ce tutorial !
Merci à tous
PS: cela dit j'avais un peu entrevu tout ça dans des cours d'archimat ça fait un bout de temps mais j'avais pas eu l'idée que cela puisse intéresser qq'1. Toujours est-il que je n'aurai pas été aussi précis et clair, donc bravo :) !

@+
Celiphane
GetheBeber Messages postés 12 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 16 décembre 2005
1 août 2003 à 10:34
Bon bé écoute, grâce à toi, le winsock m'est enfin apparu clairement au grand jour :]
Fini l'obscurentisme....!!!
Merci bien
cs_yannickt Messages postés 64 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 22 novembre 2011
31 août 2003 à 08:02
Félicitation et merci pour votre tutoriel, très complet et très vivant!
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
16 sept. 2003 à 13:25
Sympa j'ai bien apprécié ton Tut'. J'espère juste que la Mamie n'a pas fondu cet été.
Je m'en vais voir tes codes sources.
+
cedricdierckx Messages postés 5 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 23 juin 2006
25 sept. 2003 à 18:13
Salut,
il est bien le prog, mais j'ai un problème:
J'ai essayé avec un copain, mais ça ne fonctionne pas...
On n'arrive pas à ce connecter avec Winsock. J'ai déjà essayé une dizaine de programmes, rien ne va...
On a tout les deux Windows XP et on est tous les deux derrière un router...
J'espère que l'un de voux pourra m'aider...
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
9 oct. 2003 à 18:34
cedricdierckx>ba pour ce qui est question d'aider disons que la requête est pas très précise ! et puis, ta du mal voir car c pas un prog cette source ! lol ;)

moustachu> merci, mais la mamie va bien !

@+
Celiphane
gregmena Messages postés 22 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 19 novembre 2006
23 oct. 2003 à 18:17
Bon tutorial pour les débutants, bonne continuation
misterzinzin Messages postés 112 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 26 janvier 2011 2
28 oct. 2003 à 23:59
y a un truc qui a du m'echapper...

quand je met:
Private Sub Form_Load()
Winsock1.LocalPort =69 'pq 69 me direz vous mais bon on s'en fout
Winsock1.Listen
End Sub

j'ai le joli message d'erreur 40026
Etat de connexion ou de protocole errone pour la transaction ou la requete requise

et comme tjs je vien de me rendre compte de l'erreur...
mais je poste quand meme le message pour celui a qui ca arriverais:
quand on utilise la fonction winsock1.listen, il faut que ce dernier ne soit pas en protocol udp (ben vi faut du tcp sinon ca marche po!)
enfin c tout con mais falais que ca m'arrive...
Scooby1 Messages postés 48 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 26 novembre 2003
15 nov. 2003 à 03:26
Salut à tous,

Voici un exemple de multi-serveur mais avec trois Winsock :
http://www.vbfrance.com/code.aspx?ID=17948

@+
Scooby1 Messages postés 48 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 26 novembre 2003
15 nov. 2003 à 03:46
Re :

Il va falloir m'expliquer comment vous vous y prennez pour monter, avec deux Winsock, un multi-réseaux de type :

Serveur : émission/réception
Client1 : émission/réception
Client2 : émission/réception
Client3 : émission/réception
Client4 : émission/réception
etc...

Merci d'avance.
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
15 nov. 2003 à 04:41
Premièrement, merci pour l'intérêt porté à mon tutorial, et merci pour la source Zip, tout ca fait preuve de très bonne volonté pour la communauté !

Le seul petit point qui m'embête vois-tu, c'est que non, désolé (c'est bien tenté ;) !), mon petit tuto n'a pas d'erreur ! Un multiconnect ne nécessite que 2 winsocks sur le serveur, et un winsock par client ! relis bien le tuto et refais-le point à point, je t'assure que la solution énoncée est LA solution ;)
Désolé si ma syntaxe et mon parler ne sont pas clair ! J'ai voulu faire simple et rapide, peut-être un peu trop ! ;)

Et pour ne pas faire de doublons, je ne vais pas poser à mon tour un exemple correct de multiconnect, je me contenterai de te faire confiance en ce qui concerne le remaniement de ta source pour qu'elle "colle" au tuto (avec 2 wck pour le srv), et je préciserai juste également aux autres que j'ai parmi mes autres sources une source "chat", avec un multiconnect !

Voilà, voilà !

Sur ce, merci encore à tous pour vos commentaires et votre participation à rendre l'utilisation de ce winsock plus clair, que diable ! Merci Scooby1 pour ton adaptation !

[[
astuce pour le remaniement : honnetement, a quoi sert ton bouton connection sur la form du serveur, ainsi que le winsock wck(0) de cette meme feuille ? vire les, vire le code correspondant, et voila un multiconnect propre et correct : 1srv avec 2 wck et 3 clt, !
ha oui aussi, faut changer la procédure
Private Sub Wck_Close(Index As Integer)
Unload Wck(Index)
If Wck.Count 0 Then nb 0
End Sub
en mettant le Serv à la place de Wck, et le tour est joué !
Bravo encore !
]]

@+
Celiphane
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
15 nov. 2003 à 04:57
tu m'as demandés une explication sur le fonctionnement,
l'explication la voila la voici :

j'ai 4 progs : srv, clt1, clt2, clt3

srv possède :
- un winsock indexé, nommé MonWck
- un winsock serveur, nommé MonSrv

clt1, 2, 3 et 4 possède :
- un winsock, nommé MonWckClt

je lance srv, au démarrage il passer le winsock MonSrv en écoute de connexion.


je lance clt1, au démarrage il se tente de connecter son MonWckClt à MonSrv

MonSrv reçoit la demande de connexion, il génère un nouveau MonWck tout frais

Le nouveau MonWck prend la demande de connexion de MonWckClt de clt1

A ce point, nous avons un "tuyau" établit entre srv et clt1, par le biais de MonWckClt de clt1 ainsi que le nouveau MonWck de srv, "tuyau" dans lequel le débit peut passer.

je lance clt2, au démarrage il se tente de connecter son MonWckClt à MonSrv

MonSrv reçoit la demande de connexion, il génère un nouveau MonWck tout frais

Le nouveau MonWck prend la demande de connexion de MonWckClt de clt2

A ce point, nous avons un second "tuyau" établit entre srv et clt2, par le biais de MonWckClt de clt2 ainsi que le nouveau MonWck de srv, en plus du premier "tuyau".

L'opération va se répéter avec clt3

Maintenant, nous avons la configuration suivante :
srv est relié à clt1 par un "tuyau"
srv est relié à clt2 par un "tuyau"
srv est relié à clt3 par un "tuyau"

Le débit dans un "tuyau" passe dans les 2 sens (émission ET réception).

srv veut communiquer avec clt1 ? il utilise la liaison établit à cet effet
clt2 veut communiquer avec srv ? il utilise la liaison établit à cet effet
clt3 veut communiquer avec clt1 ? il envoie les données à srv avec un code pour que ces données soient réacheminer vers clt1. C'est juste de l'algo...

Voici schématiquement un multiconnect fonctionnel, avec 2 winsocks côté serveur et un winsock par client.

Je pense avoir été plus clair ainsi ;)

@+
Celiphane
Bestoftheweb Messages postés 7 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 2 février 2004
17 nov. 2003 à 23:02
bien joué ;)
Scooby1 Messages postés 48 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 26 novembre 2003
21 nov. 2003 à 22:45
Ouais en faite ma source est juste car j'utilise ton systeme sauf qu'il y a trois Winsock sur mon serveur car j'y ai mis un des clients avec. donc ton code foctionne c'est juste que je me suis un peu emmèler les pinceaux, toutes mes excuses.

Donc ma sources est juste et peut donc servir d'exemple pour ton tutorial.

@+
Utilisateur anonyme
30 nov. 2003 à 18:23
Euh merci mais j'ai un pb avec ton code, au niveau du multi server, j'ai changé winsock en server, mais ce que j'ai pas compris c'est qu'il manque des fonctions car le serveur prend la connection cré un Wck(nb), fait Wck(nb).Accept requestID
maisil faut un Private Sub Wck_DataArrival(ByVal bytesTotal As Long) ?
pour le getdata mais ce nom de fonction marche pa car c Wck(nb) et non Wck et quand je met Wck(nb)_DataArrival(ByVal bytesTotal As Long) marche pa non plus ...

Merci
Utilisateur anonyme
30 nov. 2003 à 18:37
C bon jai reussi il fallait mettre :

Private Sub Wck_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim data As String
Wck(Index).GetData data
MsgBox data
End Sub

c le index as integer que je savais pas... et aussi le Wck(Index)

Merci qd meme :)
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
30 nov. 2003 à 22:39
suffit que je précise pas UNE ligne de code (Private Sub Wck_DataArrival(Index As Integer, ByVal bytesTotal As Long)
) et ça y est mon code marche pas... cherchez un peu par vous même les gars les filles ! ;)

@+
Celiphane
Utilisateur anonyme
1 déc. 2003 à 02:48
J'ai pas di qu'il ne marchait pas...
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
1 déc. 2003 à 09:42
je précise quand même que c'était de l'humour ;)

(tout le monde trouve des difficultés dans l'apprentissage de quoi que ce soit, et c'est bien normal !!!)

@+
Celiphane
Scooby1 Messages postés 48 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 26 novembre 2003
1 déc. 2003 à 11:11
J'espère que ma source à déjà bien servie. @+
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
19 déc. 2003 à 11:32
En plus d'être divertissant c'est instructif.
J'aime bien votre approche à tous.
:-)
mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005
26 janv. 2004 à 02:28
Excellent tuto, c'est incontestablement LA référence pour ceux qui veulent apprendre à utiliser Winsock avec le protocole TCP.

Pour répondre à une question posée plus haut,
comment surmonter le problème des IP dynamiques, voici plusieurs propositions:

1. Lancer le serveur, depuis chez soi par exemple, puis communiquer l' IP aux clients. Le problème est que le serveur doit tourner en permance, et au premier reboot l' ancienne IP est obsolète. Méthode exclue, car trop précaire et volatile.

2. Obtenir une IP fixe. Et utiliser cette IP par le client.
Le problème est que si l' ordinateur du serveur est éteint, ou si le programme de chat est fermé, la connection des clients échoue.

3. Utiliser un serveur qui tourne 24/7 pour stocker l' IP du serveur (qui change invariablement).
Perso j' ai créé le programme de chat qui est à la fois client ou serveur.
Lorsqu' on lance le programme, un contrôle Inet ouvre un fichier txt situé sur un serveur LINUX. S' il est vide, le Inet appelle un script Perl sur le serveur, qui écrit l' IP dans le fichier texte. puis le programme passe en mode Serveur, avec méthode listen pour le winsock d' écoute.
Toute connection suivante trouvera cette IP dans le fichier sur le serveur LINUX via le contrôle inet, et se connectera directement à cette IP, en mode Client!
Si le serveur crashe (windows crashe parfois nan?), le prochain client à vouloir se connecter va trouver l' IP, mais invalide, la connection va échouer. Dans ce cas, le prog place sa propre IP et devient le serveur.
Un chat vraiment dynamique!

Cette méthode est forcée d' utiliser un Server Side Include comme CGI pour écrire dans le fichier texte. La majorité des serveurs webs tourne sous Linux, on peut donc manipuler ce fichier à distance avec des scripts Perl ou PHP.
C'est d' ailleurs ainsi que fonctionne -pour ceux qui connaissent Half-life- WON ou, plus récemment, Steam: un serveur relai stocke en permanence les adresses des serveurs de jeu qui tournent, et notamment les WONID ou SteamID des joueurs connectés.

Bonne prog :D
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
26 janv. 2004 à 09:39
Merci pour ton commentaire.

Ta dernière solution est vraiment pas conne ! Je la méditerai pour mes prochains développement !

@+
Celiphane
bal12452 Messages postés 5 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 15 novembre 2003
2 févr. 2004 à 21:40
salut celiphane,
excusez pour la question con mais je suis un newbie et y'a un truc que je comprends pas : à la premiere connection au serveur, ça marche, j'envoie un message, le serveur le reçoit puis je ferme le client et je le relance, impossible de se reconnecter au serveur ! Sauf si j'eteind et que je rallume le serveur...
Ta grande connaissance pourra surement m'éclairer !
merci d'avance!
cs_FuSe Messages postés 18 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 10 juillet 2003
2 févr. 2004 à 21:52
salut,
dit est ceque tu as pensé a réinitialiser le winsock ??
dans un timer, ou sur l'evenement ondisconnect (un truc dans le genre )
il faut que tu fasse winsock.close puis winsock.listen...
ainsi ton controle winsock est a nouveau près pour recevoir une connection
bal12452 Messages postés 5 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 15 novembre 2003
2 févr. 2004 à 23:48
merci FuSe, t'avais raison.
c'est a l'evenement .close : j'avais mis winsock.close mais pas winsock.listen donc rien risquait de se connecter!
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
3 févr. 2004 à 09:31
Bien bien.
Ce qui est bien avec ce tutorial, c'est que je n'ai même plus à me donner la peine de répondre aux question qui me sont posées ;)

Merci FuSe pour cette brillante déduction !

bal12452, voilà, n'hésite pas à me redemander de l'aide :o) lol

@+
Celiphane
Paganel Messages postés 7 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 3 mars 2014
6 févr. 2004 à 19:59
Merci beaucoup à ce brillant tutorial qui m'a permis de beaucoup mieux comprendre.
En fait je cherche à faire un jeu (je sais pas encore lequel mais simple genre dames/échecs etc..) online et donc ce tutorial ma beaucoup servi :)

Encore bravo et Merci :D
Paganel Messages postés 7 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 3 mars 2014
6 févr. 2004 à 23:39
mais en fait g un tit problème :)
Je ve faire un tit chat à 2 personnes .. bon alors je l'ai fait et en fait g fait un pour l'instant un prog pour le server et un prog pour le client . Si je lance les 2 sur mon pc avec le prog server, je cree un server puis je rejoin avec le prog client en mettant comme ip 127.0.0.1 (comme tu la mis) . Et là tout marche parfaitement.
Par contre j'ai envoyé le prog client à un copain, j'ai cree un server sur le prog server et je lui ai donné mon IP (par ex : 94.210.152.146) , il a essayé de se connecter mais ca ne marche pas.
Merci d'avance de votre aide. :)

PS : (les wsk sont bien en TCP)
Paganel Messages postés 7 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 3 mars 2014
7 févr. 2004 à 14:30
c encore moa :D
en fait g réussi à régler la moitié du prob.
G mixer les 2 prog en 1 et en fait kan c un pote ki héberge ca marche mais pas quand c moi.
G le Wi-fi et en fait y a un prob avec mon ip .
Quand je vais sur des sites qui donnent l'ip g un nombre normal par ex : 65.45.125.256 mais ca ne marche pas quand je le donne à mon pote pour rejoindre. Mais si j'utilise un des programmes de ce site pour donner l'ip externe ca me fait 10.0.0.1.. (qui ne marche po non plus d'ailleurs).
Comment puis je régler mon prob ?
merci d'avance :)
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
7 févr. 2004 à 16:10
Salut,

sans trop m'avancer je dirais que tu as bien codé ton ou tes progs. De toute facon si tu suis le tuto ya normalement AUCUN problème. Je me réconforte dans cette idée (que tu as bien codé) en soulignant le fait que ça marche dans certains cas, ton problème étant que ca ne marche pas dans TOUS les cas. A ce moment là, je m'aventurerais à penser que c'est un souci de connexion pure, matos protocle & compagnie... firewall routeur et choucroute dans le cablage (dernière proposition moins sûre je pense). Je peux t'aider dans le winsock, le petit fichier OCX, et le petit méli mélo qu'il requiert d'écrire dans la chtite feuille de visual basic, mais pas dans compote hardwarienne protocoléenne. Je céde ainsi la parole aux autres habitués de cette page... messieurs, merci !

@+
Celiphane
JoVB Messages postés 87 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 10 mars 2009
8 févr. 2004 à 09:42
QQN disait avoir des problèmes de licences avec Winsock... voici ce qu'il faut faire (excusez moi si on y a dja répondu, j'avoue, j'ai pas tout lu)
Dans REGEDIT :
à l'emplacement HKEY_CLASSES_ROOT\Licenses" Clé "2c49f800-c2dd-11cf-9ad6-0080c7e7b78d" (qui correspond à la liscence WINSOCK) entrez "mlrljgrlhltlngjlthrligklpkrhllglqlrk"

(ou simplement créer un fichier texte comme suit :)
REGEDIT
HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d = mlrljgrlhltlngjlthrligklpkrhllglqlrk


Voila et encore vraiment bravo a celiphane !!

//JoVB
Disicom Messages postés 107 Date d'inscription vendredi 8 novembre 2002 Statut Membre Dernière intervention 28 mars 2011
9 févr. 2004 à 15:31
Salut, mon ptit celiphane,

En grand expert du winsock, peux tu m'aider, après avoir fait le tour de Vbfrance depuis quelques mois, je recherche en vain, une solution a mon ptit problème...

- Voici, je voudrais me connecter en winsock d'un ordinateur en réseau en passant par le net sur un autre ordinateur en réseau..?
(on sous entend que l'on connait les ip de tout....) (imagine par exemple MSN qui peut se connecter de n'importe ou)

J'ai quelques d'idées sur les moyens, mais rien de concret et ce qu'il me faudrait, peux-tu m'aider ?

Mes idées sont d'utilisées les adresses MAC grâce au WMI... mais bon rien de solide dessus..

Merci...
++

Disicom
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
26 févr. 2004 à 03:06
Message pour Paganel:

es-tu derrière un routeur ou un coupe-feu (firewall) ? Si oui, c'est normal que ton ami ne puisse te rejoindre puisque c'est ton routeur/firewall qui bloque l'entrée. Par contre, si c'est toi qui communique avec lui (et qu'il n'a pas de routeur/firewall) c'est certain que ca va fonctionner. Pour contourner le problème (si tu as un routeur/firewall) tu dois placer ton PC en DMZ (DeMilitarized Zone) dans la configuration de ton routeur. Pour ce qui est de ton adresse 10.0.0.1 ca focntionne seulement si tu es sur un LAN (réseau local). Une adresse 10.x.x.x ne foncitonnera jamais sur Internet puisque c'est l'essence même d'une adresse 10.x.x.x! Les adresses 10.x.x.x, 192.168.x.x et une autre que je me rappelle plus sont pour les réseaux d'entreprise ou à la maison.

En espèrant que ca puisse t'aider.
RadCur
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
27 févr. 2004 à 02:25
Bonjour,

je vis actuellement un problème intermittent . J'ai un serveur multi-client (selon la méthode de Celliphane) et un client. Il arrive que les 2 PC se connecte un à l'autre mais rien ne se passe. En réalité, quand le client se connecte au serveur, une "conversation" devrait s'entamer entre eux pour échanger des informations et se déconnecté par la suite. Parfois, environ 1 fois sur 3, la connexion se fait mais la conversation ne s'entâme pas. J'utilise DoEvents après ma connexion pour donner le temps de réagir mais ca ne foncitonne pas. J'ai essayé un
for i = 1 to 20000
next i

pour ralentir mais ca fontionne pas.
J'ai essayer un timer de 5 secondes (5000 ms) mais malheureusement mon problème persiste.

J'utilise le Service Pack 5 pour mettre toutes les chances de mon côté.
mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005
27 févr. 2004 à 03:07
essaie de débuguer to appli au niveau du wsk_ConnectionRequest et connection_connect. Tu peux lancer deux instances de la même appli sur la même bécanne en te connectant à 127.0.0.1.
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
28 févr. 2004 à 14:35
mythic_kruger : merci mais c'est déjà fait et sur la meme machine ca fonctionne super bien et je ne vis pas ce problème. C'est dès que je les fait foncitonner sur 2 machines que mon problème apparait de facon intermittente.

Je suis entrain de me monter une autre machine alors je vais tester sur une autre et si ca persiste ca ne sera pas la machine alors mais mon appli quand elle doit s'excuter a "distance"
mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005
28 févr. 2004 à 18:24
Bien. Ton appli est ok, mais pas de connection. Il s' agirait probablement de la configuration des ports routeur/firewall, en assumant que les deux bécannes partagent le même protocole réseau ;)
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
29 févr. 2004 à 11:22
Si tes 2 applis marchent sur la même bécane (grâce à l'interface de bouclage du protocol IP, c'est à dire localhost --> 127.0.0.1), c'est que le problème vient d'en dessous du niveau IP (Couche Liaison de données certainement) ou alors au niveau d'IP, donc un problème effectivement d'adressage IP.
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
29 févr. 2004 à 16:17
Merci à Mythic_kruger et Jockos .. j'ai trouvé! Jockos.... quand j'ai vu ton msg j'ai cliqué... puisque je suis sur un LAN avec DHCP (pour mon environnement de devellopement) j'utilisais le nom de machine au lieu de son adresse IP puisque ca peut changé sans avertissement. En utilisant l'adresse IP j'ai 100% de succès à toutes les fois. Sûrement que Windows sur mon poste client était trop lent pour envoyer un "broadcast" pour trouver le poste serveur et ravoir son IP dans un délai raisonnable. Puisque mon application serveur une fois terminée roulera sur un serveur Win2000 avec une adresse IP fixe mon problème ne se reproduira plus.

encore une fois... un gros merci!
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
29 févr. 2004 à 19:12
Ce qui est bien sur cette source, c'est qu'il y a des gens compétents qui la suivent...

En ce qui me concerne, veuillez m'excuser pour mes absences réitérées, mais mes heures de participations "actives" sont écoulées je crois. Mon emploi du temps est aujourd'hui chargé de famille et de travail, ainsi ma participation communautaire devient peu à peu "spectatrice"...

Bonne chance à tous !


@+
Celiphane
cs_kelly Messages postés 55 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 9 septembre 2004
2 mars 2004 à 04:32
ouah tout d'abord bravo pour ce tuto qui souleve les commentaires et fait jaser les questions depuis ... 2 ans ?!?

La mienne est la suivante :
Je déteste envoyer des string (au sens informatique tu terme :/ ) par les socket, j'utilise en fait toujours mes winsock avec des vbArray+vbByte. Et voilà mon problème : comme je fais pour envoyer des valeur de type single ? Je peux bien sûr tricher en écrivant une fonction tordue qui à un single associe 4 bytes mais en plus du temps incroyable nécessaire à la conversion, je me démerder pour perdre de la précision.

Ya moyen de faire ca proprement et si oui comment ? Merci d'avance !
BrianceauMat Messages postés 1 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 2 mars 2004
2 mars 2004 à 12:26
Bravo pour le tutorial mais est-ce que quelqu'un sait comment on peut faire sous VB.NET ?

Merci d'avance
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
4 mars 2004 à 02:49
Salut Kelly,

As-tu essayer avec la fonction cbyte(donnees Single). Pour faire l'inverse tu utilises cSng(données bytes).

Dis-moi si ca fonctionne!

RadCur
cs_kelly Messages postés 55 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 9 septembre 2004
4 mars 2004 à 03:44
mmh avant d'essayer jme suis dit : "si ca marche le truc à radcur, jme bouffe les couilles"

mais bon, ne pouvant plus tenir, j'essaye, et là ! argggg!

enfer et damnation !

ca marche pas :):):):)

moralité (c'est pas contre toi radcur :) :

* MES COUILLES SONT SAUVES ET LES BREBIS SERONT BIEN GARDEES *

sérieusement, même VB ne parvient pas à coincer les 32 bits d'un single dans les 8 d'un byte :)

Cela dit, j'ai trafiqué un truc bizarre comme prévenu dans ma question : si ca intéresse qqun voici le code de ma fonction d'encodage (1 single -> 5 bytes) et de décodage (5 bytes -> 1 single) :

Public Sub float2bytes(f As Single, ByRef bdata() As Byte, i As Long)
'mantisse sur 4 octets puis opposé de l'exposant sur 1 octet
'i est le rang du premier octet dans le tableau de byte bdata, où
'sera stocké le single encodé
Dim ff As Single: ff = Abs(f)
Dim j As Long: j = 0
While ff <> Int(ff)
ff = ff * 10!
j = j + 1
Wend
Dim l As Long: l = CLng(ff)
bdata(i) = (l \ &H1000000) And &HFF&
bdata(i + 1) = (l \ &H10000) And &HFF&
bdata(i + 2) = (l \ &H100&) And &HFF&
bdata(i + 3) = l And &HFF&
If f >= 0! Then
bdata(i + 4) = j
Else
bdata(i + 4) = j + 128
End If
End Sub

Public Function bytes2float(ByRef bdata() As Byte, i As Long) As Single
If bdata(i + 4) < 128 Then
bytes2float = (bdata(i) * &H1000000 + bdata(i + 1) * &H10000 + bdata(i + 2) * &H100& + bdata(i + 3)) / CSng(10 ^ bdata(i + 4))
Else
bytes2float = -(bdata(i) * &H1000000 + bdata(i + 1) * &H10000 + bdata(i + 2) * &H100& + bdata(i + 3)) / CSng(10 ^ (bdata(i + 4) - 128))
End If
End Function
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
9 mars 2004 à 16:11
J'ai une grave porblème : mon programme (avec winsock) ne marche qu'en résau local !!! comment l'utiliser avec Internet HELP ME !!!!!
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
9 mars 2004 à 16:40
Expliques un peu mieux ton problème...

Mais pour commencer, ce que je peux te conseiller de faire, c'est d'essayer un simple PING sur l'adresse IP de la machine que tu veux atteindre via Internet avec ton Winsock, tu seras déjà pas mal fixé sur la nature du problème... ;)
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
9 mars 2004 à 16:41
Alors tu peux résoudre ton problème...

- en commençant par ne pas faire de multi-post, malgré la lenteur de réaction du site... ça risque pas de l'améliorer sur ce point.

- ensuite, en relisant quelque peu les commentaires de ceux qui sont passés avant toi, notament ceux qui soulignent que quand ça marche en local, c'est que ça marche tout court > il faut revoir ton matériel connexions pont firewall routeur etc... mais là déjà t'as plus besoin de relire t'as les réponses.

@+
Celiphane
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
30 mars 2004 à 00:02
bonjour celiphane,
tout d'abord bon tutorial, ta peine mérite un 10+
une petite info sur ton comment du 05/06/2003 23:06:53
Il est vra que l'UDP a beaucoup moins d'interet, le TCP c'est l'avenir.
L'UDP a un quand meme un gros avantage sur des reseaux locaux:
c'est de supporter le broadcast et le multicast.
cela permet de faire dialoguer des machines qui ne sont pas sur les mêmes plages d'adresses IP (mais non séparées par des routeurs, a moins que les routeurs autorisent ce type de flux) ou de faire des decouvertes sur le reseau (le client trouve tout seul son serveur, pratique aussi pour des bascules de serveurs).
voila, c'etait pour info.
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
30 mars 2004 à 08:44
Mon problème : le serveur n'écoute pas vers internet (mais ca marche en réseau local). J'ai peut-être trouvé la solution ; la commande bind (sur le winsock). Si qqn pourait le tester(par internet) car mon ordi de test s'est auto-bouzillé
mourad183 Messages postés 78 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 25 janvier 2007
6 avril 2004 à 16:49
salut, chapeau celipharde, safé presque une anée que je cherche à comprendre winsock, j'ai presque lit tous les cours de la planete lolll, je te remercis bcp pour ce fabuleux travail, il m'a bcp aidé, mais.... j'ai un tit prb, je vx que tu me montre (je pose la question a tlm) comment gerer les erreurs je vx dire si un client (ou serveur) n'ecoute pas je vx evité le debug.....

sinon je te donne 10/10 ;) bravoooo
pouda Messages postés 264 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 27 octobre 2014
14 avril 2004 à 19:35
franchement ca dechire ton tut heureusement i ya des trypes comme toi ki prenne le temps de former des newbies comme moi ki decouvre le monde du develloppement...

meric je te met un 10/10
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
8 mai 2004 à 20:00
Salut les aminches, bravo pour ce tutorial vachement cool (je ne m'étend pas sur les louanges pas mal de monde s'en est déjà chargé). Deux problèmes se posent à moi :

1- Au secours je comprend plus. L'erreur 10048 "Adresse en utilisation" veut ma peau. Je comprend pas pour le meme programme des fois elle vient des fois pas. C'est terrible. Et ce même en circuit fermé (je veux dire en 127.0.0.1).

2- Quand ça marchait, on ne pouvais pas se connecter à moi car Zone Alarme empechait tout les vils piratins de hacker ma belle machine. Radcur à dis de se mettre en DMZ, mais je trouve ça nul part.

Voilà comme j'ai l'impression qu'il y a ici quelques sommités en la matière, je ne doute pas de la qualité des futures réponses et en remercie chaleureusement les auteurs dès à présent.

Pour information je travaille sous Windows 2000.

Et puis quand même si aller : FELICITATIONS ! VIVE LE TUTORIAL ! OUAIS ! [projections de grains de riz]
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
9 mai 2004 à 14:11
C'est encore moi. En fait j'ai trouvé pour l'erreur 10048, il fallait fermer le Winsock à la fermeture de l'application et avoir un localPort à 0. J'aurais dû mieux chercher avant de demander.

Mais je bute toujours sur mon FireWall.

Et si par hasard qqun avait des infos sur la communication avec un FTP ...

Voilà merci
romano2005 Messages postés 1 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 31 mai 2004
31 mai 2004 à 12:50
je t'ai mit 10 pour ton tut
par contre
moi j'ai un blème dans les multiconnexions
quand je mets la propriété index à 0 dans mon projet client
j'ai plein de message d'erreur
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
1 juin 2004 à 13:08
1) Tu ne peut pas créer un winsock avec l'index 0 si il n'existe pas
2) Tu ne peut pas changer l'index d'un objet en cours de programation
scoder Messages postés 140 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 20 mars 2006
7 juin 2004 à 11:36
Comme tant d'autres l'ont fait avant moi SUPER TUT'!
chapeau bas l'artiste!

10/10
scoder Messages postés 140 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 20 mars 2006
7 juin 2004 à 13:46
j'ai testé la mutliconnexion et ça marche impec, sauf un petit problème....
je m'explique :
j'ai besoin d'utiliser une boucle for...each... pour envoyer des données à tous les clients à partir du serveur. Les index de mes winsock ne se suivent pas forcément (certains clt peuvent se déconnecter) d'où l'intérêt de for...each
le problème est que ce code me génère une erreur "type incompatible" :
dim w as winsock
for each w in F_serveur 'F_serveur étant le nom de mon form
w.senddata(data)
doevents
next

si je ne passe pas par la variable w mais directement pas for each winsock il me dit variable requise....
quelqu'un aurait la solution?
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
7 juin 2004 à 14:02
Moi, je crée une liste (tableau dynamique avec "Redim Preserve") contenant les clients connectés.
Dès qu'un client se connecte, je l'ajoute à ma liste des clients.
Quand il se déconnecte, je l'enlève de la liste et je remet à ajour la liste.

L'idéal serait de faire une liste chainée, mais en VB, c'est loin d'être aussi facile qu'en C/C++. Donc, tu peux utiliser un tableau dynamique...
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
7 juin 2004 à 14:05
Salut Scoder, ton problème doit venir de ce que tu boucle (avec for each) sur ton form, du coup certains objets ne sont pas des winsocks, d'où erreur.
Il suffit que tu boucle sur un groupe de contrôle de winsocks, et non sur un form (en remplaçant F_serveur par ton groupe).
Disicom Messages postés 107 Date d'inscription vendredi 8 novembre 2002 Statut Membre Dernière intervention 28 mars 2011
7 juin 2004 à 14:20
Salut,

Moi j'utilise une collection pour gérer les contacts connectés ou non, mais ca m'intéresse ton code avec for...each ..j'aimerai bien avoir la suite sur la résolution de ce problème !!
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
7 juin 2004 à 14:38
Salut à tous.

J'interviens rarement, mais sur ce point je souhaite donner confirmation à GlanduSchmoldu.

Par exemple, prenez une form, mettez-y un bouton, puis copier coller le plusieurs fois en spécifiant que, oui, c'est un groupe de contrôle.

Puis posez ce code dans la form :

Private Sub Form_Click()
Dim O As CommandButton
For Each O In Command1
O.Caption = "test"
Next O
End Sub


Exécutez, et cliquez sur la form comme l'indique l'évenement cité...

@+
Celiphane
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
7 juin 2004 à 14:49
Merci du soutient Celiphane.
scoder Messages postés 140 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 20 mars 2006
7 juin 2004 à 15:27
c'est bon j'ai résolu mon problème
dans msdn je vois que la variable utilisée avec for...each doit être de type variant. j'ai donc fait
Dim w As Integer
w = winsock.Count - 1
For i = 0 To w
If winsock(i).State = sckConnected Then
winsock(i).SendData ("test")
DoEvents
End If
Next

comme ça plus besoin de for...each
c'est pas trop optimisé mais pour l'instant ça fera l'affaire jusqu'à ce que je (ou qqn d'autre) fasse mieux)
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
7 juin 2004 à 15:45
ba c'est assez triste de voir la solution que tu as choisi, alors qu'on t'as donner le mieux juste au dessus...

enfin bon...


@+
Celiphane
scoder Messages postés 140 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 20 mars 2006
7 juin 2004 à 17:39
oui ta solution est bonne celiphane mais j'ai un problème avec elle,
voilà mon code
Dim w As winsock
For Each w In winsock
w.SendData ("test")
DoEvents
Next
il me met "etat de protocole ou de connexion erroné pour la transaction ou la requête requise"
est ce que cela vient du fait que j'ai un autre contrôle winsock sur mon form qui ne gère que les requêtes de connexion (cf ton tut' ;) )?
parce que la connexion est bonne puisque ma solution fonctionnait....
cs_FuSe Messages postés 18 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 10 juillet 2003
7 juin 2004 à 22:33
bon vu que c'est vivant ici, je bloque un peu.
moi j'essaie de faire uniquement de l'objet. Donc j'ai une classe client et j'aimerai avoir une propriété as winsock mais bon ça marche pas avec un groupe de controles
dans un bouton sur la form
Load W(1)
Dim C As ClClient
Set C = New ClClient
W(0).Listen
Call C.init("127.0.0.1", "26", W(1))

classe :
Dim ip As String
Dim port As Integer
Dim winsk As Winsock

Public Sub init(i As String, p As Integer, ByVal wins As Winsock)
ip = i
port = p
Set winsk = wins
winsk.Protocol = sckTCPProtocol
winsk.RemoteHost = ip
winsk.RemotePort = port
winsk.Connect
End Sub

donc il autorise pas mon winsock du client à se connecter au winsock de la form ( erreur : adresse already in use) :S
C'est pas le but de l'appli de se connecter à elle même , mais si ça marche pas en local ça risque de pas être mieux en réseau ;)

Donc voila, est ce que certains sauraient comment intégrer un winsock à un objet ?
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
8 juin 2004 à 14:02
FuSe, si c'est l'erreur 10048 qui arrive, c'est pasque tu a dû mal fermer un winsock, du coup le socket correspondant est toujours ouvert et on ne peux plus s'en servir (d'où erreur "adresse en utilisation"). Regarde un peu plus haut j'ai eu le même problème.

Scoder je comprend pas bien ce que tu dis mais "etat de protocole ou de connexion erroné pour la transaction ou la requête requise", c'est pasque au moins un de tes winsocks dans ton groupe de contrôle ne s'est pas connecté. Un winsock doit être dans l'état 7 (W.State = 7) pour pouvoir envoyer des données (W.SendData).
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
8 juin 2004 à 14:37
vous connaissez le débogage ?


@+
Celiphane
scoder Messages postés 140 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 20 mars 2006
8 juin 2004 à 14:38
c'est là que ça coince. j'ai un winsock indépendant qui gère les requêtes de connexion et qui charge un winsock(n) de mon groupe de contrôle. en toute logique tous les winsock(n) de mon groupe de contrôle sont connectés puisqu'en utilisant la méthode que je cite un peu plus haut je parviens à transférer des données. je me demande alors si le winsock "indépendant" n'interfère pas avec le groupe de contrôle et serait la cause de l'erreur....
reste la possibilité de tester chaque winsock(n) du groupe de contrôle pour voir s'il est connecté mais ça revient à faire ce que j'ai fait plus haut...
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
8 juin 2004 à 14:46
A ben oui forcemment si t'essais de faire envoyer des données à un winsock qui écoute ça pourra pas aller. Ben ouias rajoute une ligne pour vérifier mais il me semble que ça serait plus propre de faire un autre winsock unique pour écouter.
Ceci dis Celiphane a raison, t'aurais pus trouver ça tout seul il me semble ...
scoder Messages postés 140 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 20 mars 2006
8 juin 2004 à 15:24
justement j'ai suivi le tut' de Celiphane et j'ai un winsock unique pour écouter. utilisant la multiconnexion, ce winsock unique charge un winsock appartenant à mon groupe de contrôle. Il n'en fait pas partie et ne tente pas d'envoyer des données alors qu'il est en écoute. j'ai juste voulu utiliser la boucle for...each (comme citée en haut des commentaires) et visiblement ça ne marche pas sans teste.
ceci dit ça je l'ai trouvé tout seul il me semble non? le débogage ne m'a pas été d'une grande utilité dans le cas présent et si tu regardes l'heure du post de Celiphane et l'heure du mien tu constateras que j'ai posté avant même d'avoir pu voir sa réponse.
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
8 juin 2004 à 15:44
Oula du calme t'énerve pas. J'avais pas compris ce que tu disais. Ben écoute alors je sais pas. Cherche le winsock déconecté et cherche pourquoi il l'est, c'est tout ce que je peux te dire (ce qui est assez peu malheureusement).
scoder Messages postés 140 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 20 mars 2006
8 juin 2004 à 15:50
désolé si j'ai laissé paraître de l'énervement c'est pas du tout le cas ;)
je vois pas trop d'où vient l'erreur mais je vais continuer à chercher et je posterai si je trouve.
Merci quand même à Celiphane et toi
pouda Messages postés 264 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 27 octobre 2014
8 juin 2004 à 15:55
erf marche tres bien
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
8 juin 2004 à 16:00
Bonne chance
misterzinzin Messages postés 112 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 26 janvier 2011 2
8 juin 2004 à 18:39
et bien je vois que ce tuto avance bien:-) ou pourra bientot ouvrir un site sur winsock :-)
Disicom Messages postés 107 Date d'inscription vendredi 8 novembre 2002 Statut Membre Dernière intervention 28 mars 2011
8 juin 2004 à 20:31
QUi c qui peut donner des explications sur la Fonction Blind...et la façon de l'utiliser, son utilité...

Merci
cs_FuSe Messages postés 18 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 10 juillet 2003
8 juin 2004 à 20:44
Bind est un peu le listen du TCP pour l'UDP, tu affecte le controle winsock à un port.
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
8 juin 2004 à 22:34
[en lien avec le message de misterzinzin]

je suis ravi d'avoir ouvert la marche ;)

@+
Celiphane
cs_FuSe Messages postés 18 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 10 juillet 2003
17 juin 2004 à 16:41
Salut,
J'ai un problème avec la gestion des erreurs. Il y a quelque chose de spécial à faire pour intercepter les erreurs ?
Pour l'instant j'aimerai détecter si le port est déjà utilisé au lancement de l'application, j'ai testé en UDP et en TCP et dans les deux cas, il ne traite pas l'erreur. Mon code :

ec est le winsock pour cet exemple en mode TCP.

Private Sub Command1_Click()
ec.LocalPort = port.Text
ec.Close
ec.Listen
End Sub
---------
Private Sub ec_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

MsgBox Description, vbOKOnly, "Winsock Error: " & Number
CancelDisplay = True

End Sub

Mon objectif est de détécter les erreurs et d'envoyer un message adapté. mais là il m'envoie le message VB.

Une solution ?
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
17 juin 2004 à 18:00
C'est dans ta procédure où tu passe ton wck en listen qu'il faut mettre la gestion d'erreur.

En VB, la gestion d'erreur se traite par "on error resume next" ou "on error goto ETIQUETTE" où ETIQUETTE prend le nom de l'étiquette de raccordement ou bien le numéro d'une ligne défini, tu peux aussi faire du "on local error..." etc etc renseigne toi !

Ce que tu faisais, c'était utiliser l'evenement error du wck : ca n'a rien a voir, celui-ci ne se declenchera que si le wck le declenche, dans une error qu'il maitrise, comme la coupure de la connexion ou autre etc...

@+
Celiphane
hea2000 Messages postés 1 Date d'inscription mardi 29 juin 2004 Statut Membre Dernière intervention 29 juin 2004
29 juin 2004 à 01:51
Tengo que aprender Frances..... ups
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
29 juin 2004 à 02:12
surement ;)

@+
Celiphane
nycoss Messages postés 86 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 9 mars 2006
30 juin 2004 à 05:57
Super ton tuto man!! en un jour j'ai deja créer un trojan et un Chat graçe a lui mé parcontre jvoulé juste savoir si CT possible de transferer des fichier avec winsock. bon allé @+ mon frére T le melleur ;)

10/10
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
30 juin 2004 à 10:01
bien entendu que tu peux transférer des fichiers,

tu ouvres ton fichier d'un côté, ouvre un nouveau fichier de l'autre, puis tu transfert les octets par tampon de 4 à 8 ko sauf pour la derniere trame.

@+
Celiphane
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
30 juin 2004 à 20:36
Plus de 8 ko, ça couille ? La dernière trame plus petite c'est pour signaler la fin ?
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
30 juin 2004 à 23:54
en fait, ca ne couille pas à plus de 8ko, c'est juste que winsock (et donc les apis winsock en général, pas le controle ocx seulement, car il ne fait qu'utiliser les apis) EST limité à des paquets de 8192 octets.

Si un transfert en comporte plus, il sera automatiquement subdivisé et recu en plusieurs fois. Alors plutot que de laisser le protocole découper lui-même et peut-être "merder", découper VOUS même, ainsi vous contrôler le transfert.

La dernière trame est FORCEMENT plus court GlanduSchmoldu !!! Réfléchit !

Voici un exemple :

transfert d'un fichier de 5000 octets par trame de 2ko

1) envoi de 2048 octets - reste 2952 à transférer
1b) accusé de réception du prgm receveur donc declenche la suite
2) envoi de 2048 octets - reste 904 à transférer
2b) accusé de réception du prgm receveur donc declenche la suite
3) envoi les 904 octets restants >> la trame est plus petite !!!

le seul cas où la dernière trame est de taille égale aux précédentes, c'est lorsque le nombre d'octets à transférer est divisble par la taille des paquets utilisés.

@+
Celiphane
GlanduSchmoldu Messages postés 199 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 27 octobre 2006 1
1 juil. 2004 à 13:33
Aaaaa ouias ok. Merci bien.
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
1 juil. 2004 à 13:48
Je pense qu'il est indispensable de bien comprendre l'architecture en couche de la pile de protocole Internet (et éventuellement OSI) quand on veut se lancer dans de la programmation réseau.

Pile protocolaire INTERNET :

--------------
Application ex : SMTP, FTP, HTTP, POP3, Protocole propriétaire, ...
--------------
Transport ex : TCP ou UDP
--------------
Réseau ex : IP (v4 et bientôt v6)
--------------
Liason ex : HDLC, Ethernet (802.X)
--------------
Physique ex : ... (envoi le flux de bit sur le support)
--------------

Je ne vais pas décrire le fonctionnement de chaque couche et les relations (services) entre les différentes couches, mais sachez que les couches dialogues entre elles via des primitives (ensemble de routines que l'on peut appellé API par abus de langage).

Winsock est un ensemble de primitives (API) permettant à la couche Application de dialoguer avec la couche Transport et réciproquement.

Quand vous écrivez votre programme réseau en VB (Client ou Serveur SMTP, FTP ou alors un protocole maison comme pour un Chat par exemple), vous êtes au niveau de la couche Application et vous utilisez les services de la couche Transport via les primitives Winsock pour envoyer et recevoir les données...

Je pense que c'est bien de descendre un peu plus dans les détails parfois sans aller forcément trop loin...

Bonne prog à tous...

Jock
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
8 juil. 2004 à 21:51
je voulais savoir s'il est possible de réaliser un programme multiconnection avec un seul winsock(ou plutot groupe de winsock) si on initialise son index a 0, je reprends l'exemple de ta source...
§ Private Sub Serveur_ConnectionRequest(ByVal requestID As Long)
§ Nb=Nb+1
§ Load serveur(Nb)
§ serveur(Nb).Accept requestID
§ End Sub

j'essaie en fait de créer un chat(encore un) qui gère donc les connections, et j'ai fait un seul winsock, mais je ça a pas l'air de marcher tellement bien, alors est-ce moi qui code mal, ou il faut deux winsock obligatoirement?
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
8 juil. 2004 à 22:50
Il te faut forcément 2 winsocks pour ton programme serveur :
- 1 winsock principal (et unique)
- 1 winsock indéxé (une liste de contrôles Winsocks)

J'ai une comparaison qui me vient en tête, essentiel à bien comprendre pour assimiler le fonctionnement d'un programme serveur (HTTP, SMTP, POP3, FTP, Chat, ...).

Imaginez, une réceptionniste dans une banque par exemple.

Les clients arrivent sur la receptionniste qui appelle alors un agent de la banque pour dicuter avec le client...

La recepetionniste est le contrôle Winsock principal du serveur (la banque) qui reçoit la visite des clients via le port TCP ou UDP n°50000.

Les agents sont appellés par la receptionniste pour traiter avec le client. Et la recpetionniste se remet aussitôt en attente de nouveaux clients (afin de pouvoir les rediriger vers des agents).

Les agents sont les contrôles Winsock "secondaires" du serveur qui vont dialoguer avec le client (en respectant le protocol associé au service rendu par l'agent envers le client).

Les agents dialoguent sur n'importe quel port avec le client.

IMPORTANT :
Le client se connecte sur le port (n° socket) définit par le protocole du serveur. Mais le serveur ouvre aussitôt un port (dynamique, c'est à dire dont le n° est superieur à 1024) pour dialoguer avec le client.

Voilà pour le fonctionnement global dans la plupart des cas pour un programme serveur.

++

Jock
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
9 juil. 2004 à 09:49
encore une dernière question, comment dois-je paramètrer les remoteport de ces deux controles? je mets le même pour serveur et wsk ?des différents? pas du tout ? ...
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
9 juil. 2004 à 09:53
1) Tu peut faire tout dans le même groupe de winsock, mais il faut commencer le compte des clients à 1 et tu dit au winsock 0 d'écouter.

2) Pour remoteport, il faut que la valeur du client (le winsock) soit la même que la valeur localport des winsock serveur. Comme la valeur change chaque fois, il faut que le client récupère cette valeur, modifie sont remorteport et se reconete sont son winsock serveur.
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
9 juil. 2004 à 09:55
Tien ! une faute : faut lire 'sur son' et pas 'sont son' à l'avant dernière ligne. Désolé.
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
9 juil. 2004 à 18:57
Lol, ces histoires d'orthogtraphes te montent à la tête, il me semble que j'avais essayer de commencer a 1 le conte des clients, et pour ce qui est du remoteport et du localport, ils se définissent lors du lancement du programme, selon qu'on vueille se connecter, ou être serveur... donc le problème proviens certainement d'ailleur... enfin je vais tout de même jeter un coup d'oeuil :)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
4 août 2004 à 22:21
Put.... mais c'est super simple et méga puissant le Winsock !!
Merci de me l'avoir fait découvrir... vraiment merci

@ ++

MadMatt

PS : Tu a super bien expliqué, continue
Fullnet Software Messages postés 90 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 27 août 2006 1
5 août 2004 à 02:48
Bonjour, cest méga vraiment cool ton tutorial

mon programme chie ici:

Private Sub Command2_Click()
For a = 1 To NB
Wck(a).SendData "P" & Text2.Text
DoEvents
Wck(a).SendData "M" & RichTextBox1.Text
DoEvents
StatusBar1.SimpleText = "Message:" & RichTextBox1.Text & " -:- message envoyé par:[" & Text2.Text & "]"
End Sub
Galaan Messages postés 4 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 26 septembre 2004
7 sept. 2004 à 09:27
Merci pour se tut qui m'a bien rendu service.

J'ai toutefois un petit probleme. Comment faire pour recuperer des informations par le port 80 en utilisant winsock ?
Voici un peu plus de detail :
URL du site : www.monsite.com
Page a lire : www.monsite.com\mapage.php?par=par1

Merci de votre aide.

Galaan
JoVB Messages postés 87 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 10 mars 2009
7 sept. 2004 à 22:08
Alors c tout simple :

voici un exemple (repris de je c plus ou) :
Il te faut une form, avec un controle winsock (lol) et un controle text (attention si tu veux que tes données aients un aspect pas trop moche (c a dire pas tout sur une ligne) il faut mettre la propriété MultiLine = True


Private Sub Form_Load()
Winsock1.RemoteHost = "www.vbfrance.com"
Winsock1.RemotePort = 80
Winsock1.Connect
End Sub


Private Sub Winsock1_Connect()
Dim CommandeHTTP As String
Dim URLPageWeb As String

URLPageWeb = "http://www.vbfrance.com/"
CommandeHTTP = "GET " & URLPageWeb & " HTTP/1.0" & vbCrLf & "Accept: */*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf
Winsock1.SendData CommandeHTTP
End Sub



Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim HTTPDonnees As String
Winsock1.GetData HTTPDonnees, vbString
Text1.Text = Text1.Text + HTTPDonnees
End Sub


et voila... tu as tout le contenu html de la page dans ton Text1

Bonne prog ++

//JoVB
RV57000 Messages postés 10 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 27 janvier 2006
15 sept. 2004 à 20:15
Bien voir même trés bien les explications .
J'ai trouvé ce que je cherchais sans me faire de noeud au bulbe, avec des explications simples.
Seul petit truc (il faut que j'aprofondisse) la méthode avec plusieurs connections.
Merci et encore Merci ....
jihedezzi Messages postés 7 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 24 décembre 2006
19 sept. 2004 à 02:28
merci infiniment il ma beaucoup aider
Galaan Messages postés 4 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 26 septembre 2004
21 sept. 2004 à 08:12
Merci beaucoup de ton aide !
J'ai toutefois deux petites questions subsidiaire.
1/ Que faire quand la page recu est tres longue ?
Car :
§ Dim data As String
§ Winsock.GetData data
§ MsgBox data
ne me renvoi qu'une partie des infos de la page.
2/ Quelqu'un aurait-il un exemple d'entete pour la methode "post" et plusieurs parametres.

Merci d'avance.

Galaan
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
23 sept. 2004 à 18:35
Affiche le code html de ta page dans une textbox plutot qu'une msgbox... Ou mieux une richtextbox, comme ça tu n'es plus limité du tout en nombre de caractères.
Galaan Messages postés 4 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 26 septembre 2004
23 sept. 2004 à 22:10
en fait moi je n'affiche pas le texte html je le traite. Mais string que je recoi est tronque.

Galaan
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
24 sept. 2004 à 21:21
Tu ne reçois pas tout le code de la page ?? ou peut-être c'est que la méthode que tu utilise pour le voir (via une msgbox) ne permet pas de le voir en entier.
Essaye déjà de remplacer ta texbox par une msgbox... Si je me trompe désolé, dans ce cas je ne vois pas comment t'aider (laisse un message dans le forum).
@ +
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
24 sept. 2004 à 23:52
Le fichier HTML envoyé lors de la réponse HTTP du serveur vers le client sont souvent découpés en plusieurs réponses succéssives.

Le serveur HTTP, au lieu d'envoyer 1 seule et unique réponse au client avec la page HTML en entière va découper le fichier HTML et faire plusieurs envois dans des réponses HTTP.

Regarde dans le ptocol HTTP.

Sinon, il te faut une boucle d'attente de la dernière réponse HTTP et tu concatènes simplement le contenu des réponses pour reconstruire la page HTML envoyé.

A+
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
25 sept. 2004 à 12:21
Galaan> je vois que tu te sens un peu seul dans ton pb, alors j'ai pris le parti de t'aider, et crois moi, c'est de plus en plus rare ! ;)

Voici un code à coller tel quel dans un module, qui devrait convenir à ton besoin :


'--------------DEBUT DU CODE A COLLER DANS UN MODULE-----------

Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

Public Function ReponseWeb(ByVal URL As String) As String
On Error Resume Next
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String
hOpen = InternetOpen("VB OpenUrl", 0, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, URL, vbNullString, 0, &H80000000, 0)
bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
ReponseWeb = sBuffer
End Function

'-----------FIN DU CODE------------




Avec cette fonction, tu vas pouvoir recevoir le html de n'importe quoi, avec la syntaxe :

msgbox ReponseWeb("www.google.fr")
ou bien
HTML = ReponseWeb("www.vbfrance.com")

@+
Celiphane
Galaan Messages postés 4 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 26 septembre 2004
26 sept. 2004 à 12:55
un grand merci a toi celiphane j'essaie ca des que possible. J'ai encore une petite demande. Pour passer une entete post je dois surement utiliser la variable sHeaders mais comment ? Aurais-tu un exemple sous la main ?

Merci encore.

Galaan
cs_pepekiss Messages postés 24 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 14 février 2005
16 oct. 2004 à 21:58
merci bcp pour ton tuto, car étan newbiie é voulan réalisé un jeu online, sa méde bcp.
Merci Encore


Pepito
Einhart Messages postés 2 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 28 novembre 2004
25 oct. 2004 à 03:36
Merçi beaucoups je suis débutant dans la programmation réseau et ca m'a beaucoups aidé !
Encore merçi !
cs_zeboss Messages postés 36 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 15 juin 2005
3 nov. 2004 à 09:31
bonjour ton tuto super !!
mais j'ai une kestion: comment on fait pour envoyer un fichier (du client) au serveur?
merci (9/10)
DocteurVB Messages postés 211 Date d'inscription lundi 19 août 2002 Statut Membre Dernière intervention 20 mai 2005
5 nov. 2004 à 17:12
lut,

il me semble qu'il faut utiliser WskClt.SendData et WskSrv.GetData ou qqch comme ça...

en fait il me semble que pour l'envoie de données dans un sens ou dans l'autre il n'y a pas de distinction entre client et serveur il faut juste utiliser les methodes du bon ctrl. on fait une distinction Clt/Srv uniquement pour la connexion (enfin je crois...;)).

voila en tout cas je suis toujours aussi épater par la qualité de ce tuto...


DocteurVB
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
5 nov. 2004 à 18:09
qu'est-ce que je me prends comme fleurs moi ici ;)

merci :)

@+
Celiphane

ps: zeboss> va voir mes autres sources et attarde toi sur celle du chat vocal... ne l'essaye pas, elle est pas top, mais en son sein elle possède un code de transfère de fichier par "accusé de réception", c'est à dire la méthode universelle... Tu pourras surement faire mieux, mais en tout cas surement pas différemment ;)
ça transfère n'importe quoi, n'importe quel octet de 0 à 255, et fais pas gaffe aux gars énervé dans les commentaires de cette source chat vocal c'est un gros nul jaloux persuadé dans son tord d'avoir raison :) ! oui oui ça arrive... et comme l'a dit docteurVB que je salus, le client et le serveur peuvent faire la même chose, seule la connexion les distingue... relis le tuto ;)
DocteurVB Messages postés 211 Date d'inscription lundi 19 août 2002 Statut Membre Dernière intervention 20 mai 2005
5 nov. 2004 à 19:20
Celiphane,

toutes ces fleurs sont la juste récompense d'un magnifique travail qui a servi à 17617 depuis 4ans...Mais C ténorme !!! lol ;)


je me demandais si tu connaissais des truc ou si tu savais ou je pourrais trouver un bon tuto sur la classe winsock en .NET...?


DocteurVB
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
5 nov. 2004 à 21:31
non, désolé ;(


@+
Celiphane
Famidoo Messages postés 13 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
8 déc. 2004 à 17:09
moi j'ai 1 pb pour envoyer 1 mess du serveur vers ts les clients, il envoie tjrs au dernier client qui s'est connecté
rhabib Messages postés 96 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 22 février 2008
18 janv. 2005 à 20:45
10/10 merci pour l'aide
buzydoudou Messages postés 50 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 28 avril 2005
30 janv. 2005 à 18:45
Un dimanche soir (aujourd'hui !!), j'avais envie d'apprendre à utiliser le Winsock (je n'y connaissais absolument rien si ce n'est qu'on pouvait échanger des données entre 2 ordis). Je tombe d'abord sur un site qui explique comment envoyer des mails via le Winsock : je ne comprends rien !! Puis j'arrive sur un code source, plus précisemment un tutorial sur VBfrance.com (mon seul et unique site d'apprentissage de la programmation) qui explique justement les Winsock. Comme je tombe très souvent sur des sources jamais très claires et difficiles à comprendre, lors du chargement de la page, je reste perplexe (comme d'hab.). Une fois la page chargée, je commence à lire : "Niveau neuneu à rôdé". Parfait !! (mdr). Puis je commence à lire ce tuto, et je remarque d'abord la clareté et la "compréhensibilité" de la source puis l'humour qui fait sourire !! J'ouvre Visual Basic, je fais ce que le gentil monsieur qui a du passer énormément de temps sur son tuto me demande de faire. Ca marche !! (tellement rare !!). Cool. Le gentil monsieur m'a fait comprendre ce que 50 autres sources m'auraient fait à peu près comprendre en 5 mois. Je suis content de connaître les bases, je mets d'ailleurs un 10/10 à la source du monsieur ( parce que j'arrive pas à mettre un 50/10 : Nix ne veut pas ;-( ). Puis je dis merci au monsieur pour sa patience et sa "gentillesse", il y a maximum une personne sur 1000 qui est comme lui. Bravo et encore merci pour le partage de tes connaissances !!
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
31 janv. 2005 à 01:07
Le "gentil monsieur" est heureux de faire des heureux.
;)

@+
Celiphane
cs_guismo1er Messages postés 76 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 12 mars 2009
31 janv. 2005 à 15:44
salut, déjà bravo pour ce petit tu to mais à un certain moment tu dis : Pour faire un projet qui peut être connecté à plusieurs Winsock en même temps, faites-le avec 2 winsocks, l'un « Wck » avec la propriété « Index » à 0 et l'autre « Serveur ».
Rajoutez la variable public (donc accessible de partout) « Nb », et initialisez la à 0 au form_load.

je fais comment pour déclarer ma variable?

en fait je suis nouveau , je m'y connais plus en PHP. ALors si vous pourriez m'aider :)

je voudrais en fait faire comme un chat en gros, (je sais pas trop netsend? je sais pas, je verrai mais comment on fait pour declarer cette variable?)

merci à vous tous

Amicalement
-guismo1er-
Disicom Messages postés 107 Date d'inscription vendredi 8 novembre 2002 Statut Membre Dernière intervention 28 mars 2011
31 janv. 2005 à 17:19
Guismo1er, je te conseil déjà de connaître les bases du langage, pour déclarer ta variable ta : Public nom : type
Private, Global, Friend, Dim, ... enfin après tout dépend où tu veux t'en servir.

(Public Wck:winsock (mais avant il faut déjà rajouté ton composant WinSock)).

Netsend laisse tomber.

Tcho++
JoVB Messages postés 87 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 10 mars 2009
31 janv. 2005 à 18:58
il te faut déclarer ta variable dans un module en écrivant
"public Nb" (suivit de "as" puis du type par exemple "integer" si il s'agit d'un nombre entier")
ce qui te donnerai "public Nb as integer" ceci dans un module.
Ou alors si tu n'as qu'une form tu écris cette meme ligne mais précédée de "Option explicit" et le tout dans la partie "déclaration" de l'onglet "général" !
mais comme dit Disicom il serait mieux de connaitre les bases avant de te lancer dans un prog du genre ! sinon tu serra vite embeté !

//JoVB
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 avril 2005 à 22:13
salut,
tuto sympa, en effet.
dit (ou dites, tous les lecteurs ;)), pour rester dans le sujet, si quelqu'un pouvait m'éclairer pour identifier exactement le poste qui joue le "serveur", j'ai un peu énormément de mal.

http://www.vbfrance.com/forum.v2.aspx?ID=424543

je rame vraiment.
merci d'avance

PCPT
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
11 avril 2005 à 13:16
Salut à tous,

à ceux que ça intéresserait (parce qu'on est dans le sujet ici), je viens de poster ceci :

http://www.vbfrance.com/code.aspx?ID=30665

C'est une class pour transférer des fichiers, selon les techniques et méthodes que j'appuie ici.

A bon entendeur,
;)
@+
Celiphane
SuperPit37 Messages postés 61 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 13 novembre 2005
22 avril 2005 à 11:55
Bon tout d'abor merci pour ce joli tuto!

G éssayer de tester en fesant 2 appliz une serveur et une client, le seveur je l'envoi a un ami pour qu'il test sur ma machine ( et je remplace 127.0.0.1 par mon IP) voila les codes

LE SERVEUR:

Private Sub BTconnect_Click() Wck.Connect "82.XXX.XXX.12", 12666
End Sub
--------------------------------------------------------------------------------
Private Sub BTenvoie_Click() Wck.SendData "Votre texte"
End Sub
--------------------------------------------------------------------------------
Private Sub Wck_Connect() MsgBox "Connecter"
End Sub
--------------------------------------------------------------------------------

LE CLIENT

Private Sub Winsock_ConnectionRequest(ByVal requestID As Long) Winsock.Close Winsock.Accept requestID
End Sub
--------------------------------------------------------------------------------
Private Sub Form_Load()
Winsock.LocalPort = 12666 'rq : la propriété aurait pu être défini directement Winsock.Listen
End Sub
--------------------------------------------------------------------------------
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) Dim data As String Winsock.GetData data MsgBox data
End Sub

Le pb c ke kan mon ami ve m'envoyer un message il a le messager derreur suivant:Erreur d'éxécution '40006'
Etat de connexion ou de protocole erroné pour la transaction ou la requête requise

Je suis vraiment novice en la matiere ne m'en voulez pas si ma question est stupide
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 avril 2005 à 14:09
le serveur "écoute".
le client joint le serveur.
le serveur reçoit l'appel puis le confirme.
la connection est établie et tous deux ont des procédures similaires.

ton serveur se connecte. il ne doit pas se connecter, mais écouter, et le client se connecte au serveur.
donc ton serveur écoute sur un port défini, le client appelle le serveur sur son IP et son port défini.
resquestId accept..... et la connection est OK. tu as inversé les rôles.

le client n'as pas de REQUEST ID. le serveur n'as pas de CONNECT (enfin, pas dans ton utilisation)

++
PCPT
SuperPit37 Messages postés 61 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 13 novembre 2005
22 avril 2005 à 14:48
j'avai inversé les titres de plus g tout refai o zéro et sa marche impec!
dommage ke je puisse pa éffacer mon message si un admin passe ds le coin k'il n'ésite pas il n'aporte aucun intéret.
En tout ca MERCI Celiphane 10/10......
SuperPit37 Messages postés 61 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 13 novembre 2005
22 avril 2005 à 15:22
C'est celui du dessu qu'il faut éffacer il n'a aucun sens dsl g tout refait et ca marche impec en plu ds le message g inversé serveur et client ca porte a confusion
Admin si tu pass par la?
buzydoudou Messages postés 50 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 28 avril 2005
25 avril 2005 à 12:32
Remarque: inutile de tester le programme avec un ami, il suffit par exemple de:
1) Connexion sur un port et une IP donné (127.0.0.1 pour le tester toi même).
2) En cas d'erreur, c'est à dire si le serveur n'est pas sur écoute, on passe alors en mode écoute (on devient serveur) et on attend une connexion.
3) La connexion est établie par le client.

Une fois que tu as tappé l'algorithme correspondant aux 3 étapes au-dessus, tu n'as plus qu'a créér 2 exe. Par exemple un qui se nomme Winsock.exe, l'autre Winsock1.exe. Tu ouvres le premier, il va se mettre automatiquement en mode écoute, tu ouvres le deuxième, il va se connecter !

Je ne suis pas un pro du Winsock, il y sûrment plus judicieux mais bon... ...c'est une méthode comme les autres !
loulax Messages postés 12 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 septembre 2005 1
16 mai 2005 à 17:29
je te remercie énormément pour ce tuto il me sera trés trés utile. Merçi pour tous les newbies.
Pour ce qui sont intérréssé j ai mon site avec des sources pour les algorithmes génétiques ainsi que pour la fonction MinMax pour un Morpion. (www.algorithme.freegaia.net)
Encore merci
thibboss Messages postés 2 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 7 août 2005
8 août 2005 à 18:18
Ouais trop bonne source ! Je suis un newbies et je crois que ca va pas mal m'aider !! le voila ton 10 ! :p
nsslive Messages postés 7 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 17 juillet 2007
31 août 2005 à 14:56
Carrément bien expliqué, j'ai tout capté, merci!
avec ca, mon projet de telecommande pc par wifi via pda va pouvoir réellement débuter !
10/10 sans hesitation
cs_kazer04 Messages postés 182 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 14 mars 2011
6 sept. 2005 à 18:06
salut a tous je suis debutant en vb
je developpe une aplication multi-connection tout marche comme je veux ....seulement voila quand le premier connecter se deconnecte j'obtient ( erreur "340" l'element du groupe de controle '1' n'existe plus) et la je sais pas quoi fair
si quelqun peu m'aider ca me ferais plaisir
merci d'avance
cs_Algade Messages postés 19 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 5 mai 2006
1 oct. 2005 à 19:38
Hello Celiphane et tous les passionnés de ce sujet - merci à vous tous
(j'ai découvert Winsock gràce à ce tuto et je débute avec une petite appli)

Par contre

J'ai l'éternel problème du client qui se connecte au serveur (ça marche), reçoit ensuite des données du serveur (ça marche). Puis le client se déconnecte et lorsqu'il se reconnecte ==> message "adresse en utlisation"
1) J'ai bien mis des Clent.LocalPort=0 et des Client.Close partout
2) J'ai bien mis des DoEvents partout
....... et j'ai toujours le problème
Que puis-je vérifier d'autres ?? - merci d'avance à ceux qui ont déjà eu mon PB et qui l'on solutionné
cs_Algade Messages postés 19 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 5 mai 2006
1 oct. 2005 à 19:44
Hello A tous

Malgré avoir pris la précaution de mettre des "Serveur.localPort=0" et des "Client.close" avant de dééconnecter le client et aussi des DoEvents - j'ai toujours le problème du client qui se connecte une fois et qui, la deuxième fois à le message "Adresse en utilisation"
Que puis-je vérifier d'autres dans mon programme - merci pour ce tuto Celiphane et tous ceux qui le commentent
kinouseba Messages postés 34 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 8 juillet 2009
7 oct. 2005 à 18:50
Bonjour à tous !!!!!!!

Effectivement, ce tutoriel est très bien fait.

J'ai voulu faire comme ALGADE en rajoutant un bouton pour pouvoir cloturer la connection de Wck:

wck.close

Mais, lorsque je clique à nouveau sur "Connection", je n'ai plus le message 'trouvé' et ensuite losque je veux envoyer le texte, j'ai un message d'erreur !!!!??????????????
Comment faut-il faire pour cloturer correctement une connection ?
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
7 oct. 2005 à 20:02
Bonjour,
à la question :
<< comment faut-il faire pour cloturer correctement une connection (ndlr : conneXion au passage)>>

Je réponds : une connexion est correctement coupée avec la méthode Close. Le tuto ne présente rien de "sale".
L'impossiblité de vous reconnecter tient au fait que vous n'avez tout simplement pas remis le serveur en écoute avec Listen.
Le message d'erreur lorsque vous tenté d'envoyer du texte en découle directement puisque vous n'êtes pas connecté.

Concernant le message d'erreur un peu plus haut, adresse en utilisation, cela n'arrive que si vous tentez un Listen en ayant paramétré un port d'écoute qui est déjà utilisé.

<<J'ai bien mis des Clent.LocalPort=0 et des Client.Close partout>>
Où ai-je mentionner qu'il faut mettre LocalPort = 0, et de surcroit le faire partout, ainsi que des Close partout également ?

- A écoute (listen)
- B appelle A (connect)
- A arrête d'écouter (close)
- A accepte (accept)
- A & B partage des informations (senddata & getdata)
- A ou B "raccroche" (close)
- l'autre raccroche aussi dans l'évènement qu'il l'en prévient (event close, et close dedans)
- à partir de là c'est comme s'il ne s'était rien passé. On peut reprendre au début.

@+
Celiphane
fredflo74 Messages postés 14 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 28 novembre 2015
29 déc. 2005 à 12:45
Salut celiphane

dis moi lol ce tuto a eu beaucoup d'effet depuis 2002 lol, c'est la rançon de la gloire, c'est vrai que pour les debutant il est bien fait !!!

Pourquoi ne pas faire le meme tuto avec , non pas l'objet winsock , mais avec les Api Windows ;-p

Je cherche ça depuis longtemps mais jamais trouvé le top !

Merci
Utilisateur anonyme
31 déc. 2005 à 00:14
10/10 pour cette explication, merci beaucoup !
jacko20 Messages postés 5 Date d'inscription dimanche 12 septembre 2004 Statut Membre Dernière intervention 26 août 2005
23 janv. 2006 à 19:35
T'es le meilleur pour expliquer les controls winsock et franchement j'ai chercher pas mal de temps apres ce genre de tuto et grace a toi je suis arriver au bout de mes peines avec vb :)
Un tout grand merci !
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
29 janv. 2006 à 15:18
gg celiphane mais il aurait fallu plus détailler pour la multi - connec (par exemple, une liste avec les pseudos des clients)
Programeur debutant Messages postés 2 Date d'inscription jeudi 8 décembre 2005 Statut Membre Dernière intervention 3 février 2006
3 févr. 2006 à 17:33
je ne sais pas si c'est toi au lui mais il y as le m^m tutorial sur ce site http://t.u.n.free.fr/Tutaux/tutowinsck.htm
Ahweb Messages postés 48 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 15 octobre 2007
25 mars 2006 à 23:25
Un peu mal expliqué mais utile :)
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
26 mars 2006 à 12:12
<< je ne sais pas si c'est toi au lui mais il y as le m^m tutorial sur ce site http://t.u.n.free.fr/Tutaux/tutowinsck.htm >>
Lui sans aucun doute possible. Je suis l'auteur. C'est mon style. Tu auras la preuve en parcourant les autres "tutos" qu'il propose. Aucune trace de ce style "inimitable" ^^.

<< Un peu mal expliqué mais utile :) >>
C'est là tout le charme : expliquer dramatiquement mal, sans terme technique si péjoratif dans l'oreille de ceux qui sont visés par ce tutorial, c'est à dire les débutants.

@+
Celiphane
Lunduli Messages postés 7 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 16 juin 2006
1 juin 2006 à 11:01
Bonjour à tous!
Oui ca tuto est très bon pour débuter il m'a moi même aider dans mon appli donc merci à toi ô combien grand auteur qui pense à des débutants qui prendont la relève!
10/10
Cordialement
Lunduli
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
24 oct. 2006 à 06:32
Bonjour

J'ai eu l'occaz de faire une source avec winsock ya déjà un moment. Mais je m'apprçois que maintenant avec les routeurs les connexions Winsock deviennent impossibles.

Existe-t-il une solution ?

Sinon bravo celiphane ! je crois que tu as la source la + commenté de tt vbfrance ;)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
29 oct. 2006 à 13:58
En ce qui concerne le routeur, aucune solution sinon :
parametrer le routeur pour "relayer" une connexion arrivant de l'exterieur sur le routeur vers une adresse IP du réseau local (si tu pige pas je peux t'expliquer plus en détail)
mais (à ma connaissance), aucune solution pour que le programme s'occupe de ça tout seul, c'est à l'utilisateur de parametrer son routeur lui meme, donc pas pratique.

Enfin ce problème se présente si l'utilisateur veut etre en mode serveur, s'il est client, le routeur ne pose pas de prob (sinon on aurait des problèmes pour jouer sur internet, aller sur msn, ou meme voir une page web...)

Le mieux je pense, c'est de faire un petit guide pour expliquer aux utilisateur comment parametrer leurs routeurs

A+
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
29 oct. 2006 à 17:58
En effet, tu as raison, je viens de me renseigner la dessus.

Pour les routeurs, paramétrer le port vers la machine, mais pour cela il faut que son adresse réseaux ne soit pas délivré par le routeur lui même mais spécifié par l'utilisateur sur la machine dans les paramètres TCP/IP.

C'est possible avec toutes les "box" normalement...

ceci pour les connexions entrantes (Listen), pour les sortantes, no problemo mis à par le paramétrage FireWall.

Bonne Prog @+
toufou2006 Messages postés 89 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 17 février 2014 1
30 janv. 2007 à 13:38
BRAVO :) j aurai pas fait mieux :)
:p on a la meme chose pour les acces Mysql ?
si oui, j y cours :)
terafun Messages postés 6 Date d'inscription dimanche 15 janvier 2006 Statut Membre Dernière intervention 16 juillet 2008
30 juin 2007 à 12:47
HI
j'ai une petite question
est ce que quelcun connqi une méthode pour lancer un serveur sur une machine du réseau local accessible depuis le réseau Internet sans faire une redirection de port dans le routeur ou le proxy, comme le fait Skype ou MSN, etc ...,
Merci
peug Messages postés 232 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 5 octobre 2012
2 déc. 2007 à 17:39
Avé,
P'tit question. Peut-on envoyer une instance de class ?

dim oObjet as cMaClasse

set oObjet = collection.item(2)

wsock.senddata oObjet
?
merci
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 1
30 janv. 2008 à 12:12
bonjour à tous
Merci CELIPHANE pour ce tuto! de plus le langage assez cool et abordable est très sympatique!
je cherchais ce genre d'explication mais sans savoir qu'il fallait chercher dans les connexions avec winsock!
petite question j'ai fait un jeu de scrabble, je veux jouer en réseau sur internet à 4 joueurs.
donc je comprends bien qu'il faut utiliser les winsocks pour communiquer mais pour communiquer sur le net au départ est ce qu'il suffit de se connecter à son fournisseur d'accès et de récupérer l'adresse IP qu'on trouve dans l'ipconfig?
aussi je voudrais faire des essais mais comme je suis seul comment faire pour simuler 4 joueurs sur le même ordi et surtout avec une seule connexion internet?
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 1
30 janv. 2008 à 16:42
rebonjour
je teste actuellement ce tuto
une question s'est posée plus haut ou tu donnais comme solution:

si par contre tes winsocks sont parsemés (genre il n'existe que wck(0) wck(1) wck(5) wck(7) et wck(13) par exemple) ba oui prend le for each.
Ca tourne pas si tu fais :

dim W as winsock
for each W in Form_Qui_T_Interesse
W.senddata "super exemple n'est-ce pas ?"
doevents
next W

c'est for each W in wck 'nom du des controle winsock qui ont un index
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
20 avril 2008 à 18:18
voilà les explications qu'il me fallait pour que mon application soit encore plus puissante

MERCI
Nowid50 Messages postés 45 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 29 octobre 2009
18 mai 2008 à 13:41
Très bien expliqué, les codes sont clairs et l'humour et la pour rester motivé !

Quel beau "mix" nous avons là ! :D
bigbrother26 Messages postés 35 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 4 juillet 2010
19 août 2009 à 22:51
Merci pour ce tuto, qui m'aide drolement pour mes debut dans le winsock
Merci et Bravo
PAT9SAB Messages postés 22 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 6 décembre 2009
11 oct. 2009 à 23:51
bonjour peut etre pourais vous m'aider
j'ai fais une appli pour commander une carte relais, maintenant je voudrais la commander d'un autre pc donc je pensais integré un serveur a l'aplication de la carte et faire un client pour l'autre pc mais je ne sais pas si c'est la bonne solution et comment mi prendre (debutant en vb encore plus en reseaux ) merci pour l'aide
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016
9 déc. 2009 à 01:36
Bonjours,
J'ai Lus attentivement le tuto a plusieur reprise.. et encor un petit probleme se pose a moi .. en survolant les commentaire je n'est trouver aucune reponse a mon probleme je l'explique :

J'ai crée 2 appli (client et serveur) il communique par 2 winsock .. un qui envoi les donné d'un chat et l'autre qui envoi la position d'image pour faire un petit MMO entre pote ^^
sa marche nickel ! mais le probleme .. (j'ai 2 client pour l'instant (je fait des client séparer comme sa chaque client est unique sa convien mieux pour se que je veut faire)) le probleme est que .. huum comment dire ..
Par example.. Joueur1 vien sur le jeu .. ensuite il se deco ..
il veut revenir se reconnecter.. sa marche pu (alors que la premire connection marcher tres bien!)
Comment expliquer vous se probleme et comment le resoudre.. ?
Merci d'avence pour votre precieuse aide =)

Cordialement, MeSod
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 déc. 2009 à 01:54
mesod -> lors de la fermeture de la connexion tu ne relances pas l'écoute du serveur, le client ne peut donc pas se reconnecter

ps : utilise le forum pour ce genre de questions, c'est fait pour :)
++
Rejoignez-nous