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

Signaler
Messages postés
57
Date d'inscription
samedi 30 mars 2002
Statut
Membre
Dernière intervention
24 mars 2003
-
PCPT
Messages postés
13281
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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

PCPT
Messages postés
13281
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
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 :)
++
cs_MeSod
Messages postés
89
Date d'inscription
dimanche 21 septembre 2008
Statut
Membre
Dernière intervention
26 avril 2016

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
PAT9SAB
Messages postés
22
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
6 décembre 2009

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
bigbrother26
Messages postés
35
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
4 juillet 2010

Merci pour ce tuto, qui m'aide drolement pour mes debut dans le winsock
Merci et Bravo
Nowid50
Messages postés
45
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
29 octobre 2009

Très bien expliqué, les codes sont clairs et l'humour et la pour rester motivé !

Quel beau "mix" nous avons là ! :D
pile_poil
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
voilà les explications qu'il me fallait pour que mon application soit encore plus puissante

MERCI
cs_marco62118
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
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
cs_marco62118
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
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?
peug
Messages postés
234
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Avé,
P'tit question. Peut-on envoyer une instance de class ?

dim oObjet as cMaClasse

set oObjet = collection.item(2)

wsock.senddata oObjet
?
merci
terafun
Messages postés
6
Date d'inscription
dimanche 15 janvier 2006
Statut
Membre
Dernière intervention
16 juillet 2008

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
toufou2006
Messages postés
90
Date d'inscription
jeudi 6 avril 2006
Statut
Membre
Dernière intervention
17 février 2014
1
BRAVO :) j aurai pas fait mieux :)
:p on a la meme chose pour les acces Mysql ?
si oui, j y cours :)
Mayzz
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
27
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 @+
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009

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
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
27
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 ;)
Lunduli
Messages postés
7
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
16 juin 2006

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

<< 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
Ahweb
Messages postés
48
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
15 octobre 2007

Un peu mal expliqué mais utile :)
Programeur debutant
Messages postés
2
Date d'inscription
jeudi 8 décembre 2005
Statut
Membre
Dernière intervention
3 février 2006

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
cs_Papymuzo
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
gg celiphane mais il aurait fallu plus détailler pour la multi - connec (par exemple, une liste avec les pseudos des clients)
jacko20
Messages postés
6
Date d'inscription
dimanche 12 septembre 2004
Statut
Membre
Dernière intervention
26 août 2005

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 !
Utilisateur anonyme
10/10 pour cette explication, merci beaucoup !
fredflo74
Messages postés
14
Date d'inscription
lundi 29 août 2005
Statut
Membre
Dernière intervention
28 novembre 2015

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
kinouseba
Messages postés
34
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
8 juillet 2009

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 ?
cs_Algade
Messages postés
19
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
5 mai 2006

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
cs_Algade
Messages postés
19
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
5 mai 2006

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_kazer04
Messages postés
182
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
14 mars 2011

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
nsslive
Messages postés
7
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
17 juillet 2007

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
thibboss
Messages postés
2
Date d'inscription
samedi 6 août 2005
Statut
Membre
Dernière intervention
7 août 2005

Ouais trop bonne source ! Je suis un newbies et je crois que ca va pas mal m'aider !! le voila ton 10 ! :p
loulax
Messages postés
12
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
18 septembre 2005

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
buzydoudou
Messages postés
50
Date d'inscription
mardi 24 août 2004
Statut
Membre
Dernière intervention
28 avril 2005

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 !
SuperPit37
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005

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?
SuperPit37
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005

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......
PCPT
Messages postés
13281
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
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

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
PCPT
Messages postés
13281
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
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
JoVB
Messages postés
87
Date d'inscription
lundi 4 novembre 2002
Statut
Membre
Dernière intervention
10 mars 2009

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
Disicom
Messages postés
107
Date d'inscription
vendredi 8 novembre 2002
Statut
Membre
Dernière intervention
28 mars 2011

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++
cs_guismo1er
Messages postés
76
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
12 mars 2009

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-
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

Le "gentil monsieur" est heureux de faire des heureux.
;)

@+
Celiphane
buzydoudou
Messages postés
50
Date d'inscription
mardi 24 août 2004
Statut
Membre
Dernière intervention
28 avril 2005

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 !!
rhabib
Messages postés
96
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
22 février 2008

10/10 merci pour l'aide
Famidoo
Messages postés
13
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

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é
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

non, désolé ;(


@+
Celiphane
DocteurVB
Messages postés
211
Date d'inscription
lundi 19 août 2002
Statut
Membre
Dernière intervention
20 mai 2005

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

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

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
cs_zeboss
Messages postés
36
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
15 juin 2005

bonjour ton tuto super !!
mais j'ai une kestion: comment on fait pour envoyer un fichier (du client) au serveur?
merci (9/10)
Einhart
Messages postés
2
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
28 novembre 2004

Merçi beaucoups je suis débutant dans la programmation réseau et ca m'a beaucoups aidé !
Encore merçi !
cs_pepekiss
Messages postés
24
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
14 février 2005

merci bcp pour ton tuto, car étan newbiie é voulan réalisé un jeu online, sa méde bcp.
Merci Encore


Pepito
Galaan
Messages postés
4
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
26 septembre 2004

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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+
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009

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).
@ +
Galaan
Messages postés
4
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
26 septembre 2004

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
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009

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

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
jihedezzi
Messages postés
7
Date d'inscription
mardi 24 juin 2003
Statut
Membre
Dernière intervention
24 décembre 2006

merci infiniment il ma beaucoup aider
RV57000
Messages postés
10
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
27 janvier 2006

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 ....
JoVB
Messages postés
87
Date d'inscription
lundi 4 novembre 2002
Statut
Membre
Dernière intervention
10 mars 2009

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
Galaan
Messages postés
4
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
26 septembre 2004

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
Fullnet Software
Messages postés
91
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
27 août 2006
1
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
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009

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
retaks666
Messages postés
286
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 juillet 2007

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 :)
cs_the_best
Messages postés
212
Date d'inscription
jeudi 13 novembre 2003
Statut
Membre
Dernière intervention
6 avril 2006

Tien ! une faute : faut lire 'sur son' et pas 'sont son' à l'avant dernière ligne. Désolé.
cs_the_best
Messages postés
212
Date d'inscription
jeudi 13 novembre 2003
Statut
Membre
Dernière intervention
6 avril 2006

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.
retaks666
Messages postés
286
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 juillet 2007

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 ? ...
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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

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
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
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
Aaaaa ouias ok. Merci bien.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
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

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
nycoss
Messages postés
86
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
9 mars 2006

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

surement ;)

@+
Celiphane
hea2000
Messages postés
1
Date d'inscription
mardi 29 juin 2004
Statut
Membre
Dernière intervention
29 juin 2004

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

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
cs_FuSe
Messages postés
18
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
10 juillet 2003

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

[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

Bind est un peu le listen du TCP pour l'UDP, tu affecte le controle winsock à un port.
Disicom
Messages postés
107
Date d'inscription
vendredi 8 novembre 2002
Statut
Membre
Dernière intervention
28 mars 2011

QUi c qui peut donner des explications sur la Fonction Blind...et la façon de l'utiliser, son utilité...

Merci
misterzinzin
Messages postés
112
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
26 janvier 2011
1
et bien je vois que ce tuto avance bien:-) ou pourra bientot ouvrir un site sur winsock :-)
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
Bonne chance
pouda
Messages postés
265
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
27 octobre 2014

erf marche tres bien
scoder
Messages postés
140
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
20 mars 2006

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
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
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

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
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

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...
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

vous connaissez le débogage ?


@+
Celiphane
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
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).
cs_FuSe
Messages postés
18
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
10 juillet 2003

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 ?
scoder
Messages postés
140
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
20 mars 2006

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....
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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

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)
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
Merci du soutient Celiphane.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
Disicom
Messages postés
107
Date d'inscription
vendredi 8 novembre 2002
Statut
Membre
Dernière intervention
28 mars 2011

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 !!
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
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).
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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...
scoder
Messages postés
140
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
20 mars 2006

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?
scoder
Messages postés
140
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
20 mars 2006

Comme tant d'autres l'ont fait avant moi SUPER TUT'!
chapeau bas l'artiste!

10/10
cs_the_best
Messages postés
212
Date d'inscription
jeudi 13 novembre 2003
Statut
Membre
Dernière intervention
6 avril 2006

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
romano2005
Messages postés
1
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
31 mai 2004

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
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
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
GlanduSchmoldu
Messages postés
199
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
27 octobre 2006
1
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]
pouda
Messages postés
265
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
27 octobre 2014

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
mourad183
Messages postés
78
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
25 janvier 2007

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
cs_the_best
Messages postés
212
Date d'inscription
jeudi 13 novembre 2003
Statut
Membre
Dernière intervention
6 avril 2006

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é
thierrydelepine
Messages postés
521
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
11 septembre 2008
5
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.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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... ;)
cs_the_best
Messages postés
212
Date d'inscription
jeudi 13 novembre 2003
Statut
Membre
Dernière intervention
6 avril 2006

J'ai une grave porblème : mon programme (avec winsock) ne marche qu'en résau local !!! comment l'utiliser avec Internet HELP ME !!!!!
cs_kelly
Messages postés
55
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
9 septembre 2004

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
radcur
Messages postés
282
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
15 août 2012
2
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
BrianceauMat
Messages postés
1
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
2 mars 2004

Bravo pour le tutorial mais est-ce que quelqu'un sait comment on peut faire sous VB.NET ?

Merci d'avance
cs_kelly
Messages postés
55
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
9 septembre 2004

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 !
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
radcur
Messages postés
282
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
15 août 2012
2
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!
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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.
mythic_kruger
Messages postés
242
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
10 novembre 2005

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 ;)
radcur
Messages postés
282
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
15 août 2012
2
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
242
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
10 novembre 2005

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
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é.
radcur
Messages postés
282
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
15 août 2012
2
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
Disicom
Messages postés
107
Date d'inscription
vendredi 8 novembre 2002
Statut
Membre
Dernière intervention
28 mars 2011

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
JoVB
Messages postés
87
Date d'inscription
lundi 4 novembre 2002
Statut
Membre
Dernière intervention
10 mars 2009

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
Paganel
Messages postés
7
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
3 mars 2014

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 :)
Paganel
Messages postés
7
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
3 mars 2014

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

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
bal12452
Messages postés
5
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
15 novembre 2003

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!
cs_FuSe
Messages postés
18
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
10 juillet 2003

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

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!
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

Merci pour ton commentaire.

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

@+
Celiphane
mythic_kruger
Messages postés
242
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
10 novembre 2005

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
madbob
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

En plus d'être divertissant c'est instructif.
J'aime bien votre approche à tous.
:-)
Scooby1
Messages postés
48
Date d'inscription
dimanche 12 mai 2002
Statut
Membre
Dernière intervention
26 novembre 2003

J'espère que ma source à déjà bien servie. @+
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
Utilisateur anonyme
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

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
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 :)
Utilisateur anonyme
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
Scooby1
Messages postés
48
Date d'inscription
dimanche 12 mai 2002
Statut
Membre
Dernière intervention
26 novembre 2003

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.

@+
Bestoftheweb
Messages postés
7
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
2 février 2004

bien joué ;)
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
Scooby1
Messages postés
48
Date d'inscription
dimanche 12 mai 2002
Statut
Membre
Dernière intervention
26 novembre 2003

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.
Scooby1
Messages postés
48
Date d'inscription
dimanche 12 mai 2002
Statut
Membre
Dernière intervention
26 novembre 2003

Salut à tous,

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

@+
misterzinzin
Messages postés
112
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
26 janvier 2011
1
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...
gregmena
Messages postés
22
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
19 novembre 2006

Bon tutorial pour les débutants, bonne continuation
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
cedricdierckx
Messages postés
5
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
23 juin 2006

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...
cs_moustachu
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

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.
+
cs_yannickt
Messages postés
64
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
22 novembre 2011

Félicitation et merci pour votre tutoriel, très complet et très vivant!
GetheBeber
Messages postés
12
Date d'inscription
jeudi 31 juillet 2003
Statut
Membre
Dernière intervention
16 décembre 2005

Bon bé écoute, grâce à toi, le winsock m'est enfin apparu clairement au grand jour :]
Fini l'obscurentisme....!!!
Merci bien
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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).
cs_walk
Messages postés
3
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
29 juillet 2003

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.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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_JCpp
Messages postés
334
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
3 juillet 2010

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.
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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_FuSe
Messages postés
18
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
10 juillet 2003

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+
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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_JCpp
Messages postés
334
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
3 juillet 2010

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

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
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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

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
cs_jacques34
Messages postés
8
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
7 avril 2004

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

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_vinc
Messages postés
32
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
11 octobre 2003

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???
cs_vinc
Messages postés
32
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
11 octobre 2003

Il y a tu un moyen de mettre un idex sur une form??? car je voudrais deux fois ma form1
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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_dtom
Messages postés
30
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
16 novembre 2003

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.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

ho non mais t'inquiete pas je ne m'en formalise pas ! c'était de l'humour c'est tout !
lol
@+
Nargzul
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
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

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 ;)
cs_vinc
Messages postés
32
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
11 octobre 2003

ok merci!
Nargzul
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
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

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?
cs_vinc
Messages postés
32
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
11 octobre 2003

hooooooo........alors le génie de céliphane n'en prend une claque!!!

petit joke haha!!
Nargzul
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
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

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!
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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

celiphane! ce n'étais pas de l'ironie....il faut vraiment etre intelligent pour trouver plein de solution comme ca!
cordialement...ton ami vinc
Nargzul
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
et comment tu fais pour interpreter

mes variables sont définie en tant que string....
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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
3
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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

heu???
c'est de l'ironie que je sens là ? ;o
@+
cs_vinc
Messages postés
32
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
11 octobre 2003

Wow!! quel génie tu es celiphane!!
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
bien vu... ;)
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

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 ;)
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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).
cs_vinc
Messages postés
32
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
11 octobre 2003

Bonne question Nargzul.....j'aimerais moi aussi savoir la réponse!
Nargzul
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
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

merci FuSe! cela ma éclairer...je t'en remercie
cs_FuSe
Messages postés
18
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
10 juillet 2003

Hum on me corrigera si je me trompe mais tu peut pas envoyer ce genre de commande ( le code il se modifie pas en temps réel ), il faut que tu envoie une chaine ( ex : "[visible]" ) et ensuite sur le programme recepteur dans l'evenement data arrival ( un truc du genre m'en rapelle plus ) tu fait getdata et tu analyse la chaine , et en fonction du code reçu ( ex "[visible]" ) tu execute ton code ( picture2.visible=true). En gros enfin moi c'est ma technique, tu a une section des chaines ( les 5 premiers caratères par exemple ) qui contient un code d'operation et ensuite tu peut ajouter à la chaine des paramètres... Je fait donc avec un select case ...
Voila en esperant t'avoir éclairé un peu ...
cs_vinc
Messages postés
32
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
11 octobre 2003

Comment on fait pour envoier une command....et bien je veut dire: si je fait wck.senddata picture2.visible = true.......comment je fait pour que lautre winsock recoive et traite la demende??
ria94
Messages postés
97
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Au fait je mets 12/10 et j'aurai peut etre bien pas mal de question a te poser dans le futur etant donné que je debute avec winsock.
ria94
Messages postés
97
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Juste un petit message pour dire que c'est trop excellent ce que t'as fait, simple et explicite j'imaginais pas mieux.
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
La méthode GetData d'un controle Winsock sert à transférer les données contenu dans le buffer (tampon) d'arrivé dans une variable de ton programme (variable sur laquel tu pourras alors travailler).

Pour résumé, ça sert simplement à récupérer les données reçu par ton control Winsock (provenant de la couche TCP).

Pour infos, UDP est aussi utilisé sur internet, même si on parle de réseau TCP/IP sur le Net.
Pour les softs de visio-conférence, on utilise UDP au niveau de la couche Transport (du modèle OSI) et on utilise un protocol de gestion d'ordonnancement des données et de correction sur une couche Superieur (RTP et RTCP). Cela dans le but de gagner en vitesse d'échange (nécessaire pour des échanges real-time)...
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

slt, merci
babboss> peekdata ? c'est pas dans le tutorial ça, a moins que tu ne parles de getdata, la méthode winsock, et là oui ca rentre dans le cadre du tutorial, mais je ne vais m'étendre d'avantage, car il me semble que c'est deja bien ravacher ! ;)
@+
cs_babboss
Messages postés
121
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
29 novembre 2006

salut,
merci pour ce tuto.
moi j ai apris un truc c le DoEvents
avant je bidouiller pour ke sa marche et bin maintenant je v metre DoEvents :D

euh sinon tu pourai parler de PeekData par ce ke j ai po compris koi sa servai
et puis tu explike super bien je trouve :)
Ickik
Messages postés
193
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
10 mars 2010
2
genial. pour tous ceux qui comme moi l'avait (le winsck) decouvert par un prog bourrin, la on redecouvre mais avec des explications (c pas tous jours) et on se contente pas de recopier betement.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

encore une fois, merci
Nargzul
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
splendide! men faut encore!!!!

non, mais si il pouvait y avoir un peu plus...

mais superbe, je connaissais pas le winsock ya une heure et mnt mon application chat tourne!!! thanks 9/10 pour la grosseur du contenu 10/10 pour la qualité, on mettra 10 koi...
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

dsl, j'ai raté mon copier coller ! j'avais mis l'adresse d'une source qui permettait l'enregistrement des controles dans la base de registre, et dans les commentaires de cette source ils donnaient d'autres solutions !
j'étais tombé dessus par hasard, donc je ne peux plus te donner cette adresse ! bonne recherche cela dit ! @+
Igorbis
Messages postés
2
Date d'inscription
samedi 14 juin 2003
Statut
Membre
Dernière intervention
21 juin 2003

J'ai regardé tous les comment's mais apperement personne n'a eu le mm pb que moi! A moins que je n'ai sauté un passage, pour la peine, je relis :)
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

C'est loin d'être idiot comme pb !
Voici une bonne piste il me semble, parmi tant d'autres ! Au pire pense a lire les comment's !
@+
Igorbis
Messages postés
2
Date d'inscription
samedi 14 juin 2003
Statut
Membre
Dernière intervention
21 juin 2003

J'ai un petit probleme et j'espere que vous aller y répondre, meme si la question à l'air terriblement con!
Quand j'essaye de mettre un winsock j'ai un message qui me dit que j'ai pas la licence adéquate pour l'utiliser, comment ça se fait ça?
Je vous avais dis que la question était con mais pouvez vous y répondre SVP.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

Du calme du calme, pas la peine de pollué ce site avec ton triple comment'.

Merci pour cette briante information. Pour les autres, je maintiens, UDP c'est nul.

@+

Lol, mais non je plaisante, je veux juste faire dresser les cheveux de Nbesty ;)

bon nbesty, oui tu aimes UDP. Nan je n'ai pas reç de formation UDP, ni TCP d'ailleurs, car j'apprend seul et je retranscrit mes impressions.
J'ai dit UDP=nul en précisant dans mon premier commentaire plus haut que "je ne m'y suis jamais intéressé et que peut être c'est bien peut être c'est nul".
Aujourd'hui, je m'en fous, car UDP ne répond pas DU tout à mes attentes : ca ne marche qu'en locale, c'est pas sécurisé et ca ne répond pas du tout au couche de communication réseau : c'est un protocole bateau en phase d'extinction.
C'est ma part du gateau telle que je la vois... et jamais je n'irai apprendre a quelqu'un qu'il faut penser comme moi !

ma devise,
UDP, c'est peut etre pour vous, moi je m'en fous !

lol ;)

@+ et merci de tes informations pour ceux que ca interesse !
NBesty
Messages postés
1
Date d'inscription
lundi 28 avril 2003
Statut
Membre
Dernière intervention
5 juin 2003

Contrairement a ce que vous dites, UDP n'est pas nul... Au contraire il est bien plus rapide que TCP puisqu'on a viré tous les controles d'erreur...

UDP sert dans le cas de satellites, de trucs comme ca... Dans le cas ou une réponse un peu erronnée est moins grave qu'une réponse lente...

Voila pour le principe d'UDP...
Pour finir, tout bon informaticien a appris les deux lors de sa formation... UDP est bien plus utilisé qu'on ne le croit dans le mondre professionnel
sethpaien
Messages postés
1
Date d'inscription
mercredi 11 septembre 2002
Statut
Membre
Dernière intervention
4 juin 2003

Ahh je vais pouvoir enfin faire une application serveur-client.
Thanks2U
cs_temoin
Messages postés
59
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
30 octobre 2006

super mec tu explique mieux que mon prof
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

merci encore !
themrok666
Messages postés
14
Date d'inscription
mardi 11 mars 2003
Statut
Membre
Dernière intervention
11 octobre 2004

Tres bon tuto, merci pr les noobs comme moi ;-)
Il y a un petit passage ou tu va assez vite, un peu trop meme, Dr VB l'a dailleurs écrit aussi, mais en tout cas je me suis tres bien debrouillé rien qu'avec ton tuto, il est donc a porté de TOUS.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

j'ai déjà expliqué dans les commentaires plus haut (le dernier de celiphane au-dessus) pourquoi un doevents est nécessaire, et qu'il faut au mieux faire un système avec "accusé de réception".

qd à savoir la vitesse avec 10000 clients, je n'ai jamais eu l'occasion de tester !!!
Vous me tiendez au courant ! c'est intéressant ! ;)
dragonspyro93
Messages postés
8
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
17 avril 2003

Merci beaucoup
Une derniere question. Si j ai 10 000 clients cela ne va t il pas ramer ?
Est ce la bonne solution ?
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Exact, en mettant DoEvents, ça marche...
ça permet de vider le buffer et de laisser respirer le Système...
cs_FuSe
Messages postés
18
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
10 juillet 2003

Salut,
Bon euh d'après ce que j'ai déjà pu observer, il dfaut mettre la commande Doevents juste après ton senddata, ne me demande pas pourquoi, la msdn en anglais est un peu trop spirituelle à mon gout, mais bon normalement ça marche, à chaque fois que j'ai fait des appli avec des sends à plusieurs clients ya pas eu de problème.
Essaye et tu verra ...
dragonspyro93
Messages postés
8
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
17 avril 2003

Bon alors voila quelque chose de mystique (c est pasune facon de parler). je crois avoir resolut mon probleme (merci albert0) apparemment ca marche si on met nb et non nb - 1 .
Mais voila si je fais ca :

'bouton qui envoit le texte a tous les clients
Private Sub Command1_Click()
For a = 1 To nb
wck(a).SendData (txtSend.Text)
MsgBox (a)
Next a
txtSend.Text = ""
End Sub

ca marche !!!! mais si je commente "MsgBox (a)" ca ne marche plus (seul lepremier connecte recoit le message). Quelqu un as t il une solution a ce mysterieux mystere ????
Serais ce un bug de VB 6.0 ou de mes neurones ?????

Merci de votre aide
albert0
Messages postés
249
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
9 août 2008

c'est pas wck.count qui faut faire mais nb-1 j'explique :)


For a = 1 To Nb - 1 'boucle qui envoi le message a tout les user
chat.SelStart = Len(chat.Text)
chat.SelText = vbCrLf & "*** Server Message: " & Text1.Text
chat.SelStart = Len(chat.Text)
W(a).SendData "B" & "*** " & Text1.Text
Next a

vala Nb le nb qui fait + 1 a chaque foi que quelqun se connect

albert0
dragonspyro93
Messages postés
8
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
17 avril 2003

Je veut faire une application avec un server et des clients
le server sert juste a envoyer des messages et les clients juste a les
recevoir

voile lecode pour le vouton

Private Sub Command1_Click()
For i = 1 To wck.Count - 1
wck(i).SendData (txtSend.Text)
Next i
txtSend.Text = ""
End Sub


mais cela n envoit le message qu au dernier client connecté pourquoi ?

voila lecode complet du server qui je crois est conforme au tutorial

Const PORT = 1001
Dim nb As Integer

'bouton
Private Sub Command1_Click()
For i = 1 To wck.Count - 1
wck(i).SendData (txtSend.Text)
Next i
txtSend.Text = ""
End Sub

Private Sub Form_Load()
nb = 0
serveur.LocalPort = PORT
serveur.Listen
End Sub

'demande de connection
Private Sub serveur_ConnectionRequest(ByVal requestID As Long)
nb = nb + 1
Load wck(nb)
wck(nb).Accept requestID
' afficher (requestID)
End Sub
Private Sub Wck_Close(Index As Integer)
Unload wck(Index)
If wck.Count 0 Then nb 0
End Sub

Private Sub afficher(txt As String)
MsgBox (txt)
End Sub
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Ce que dis celiphane est exact...
Un dialogue client/serveur, c'est ça...
D'ailleur, quand la connexion est établit entre le client et le serveur, on ne fait plus vraiment la distinction entre le client et le serveur. Les 2 sont des interlocuteurs...

1- A envoi un message à B.
2- A attend la réponse de B.... (boucle d'attente... avec DoEvents dans la boucle !)
3- B réceptionne le message de A, le traite et envoi un acquittement à B ou un autre message.
4- B attend la réponse de A... (boucle d'attente)
....
....
...
...

Vous pouvez regarder les exemples d'envoi de mail anonyme qu'il y a sur ce site pour comprendre le dialogue client/serveur...
espritclub
Messages postés
6
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
16 juin 2010

Tout d'abord mercxi pour ce tutorial et merci a tous ceux qui font partager leur savoir sur ce site.
Je suis un petit nouveau et j'aimerais bien maintenant pour realiser un jeu multiclient pouvoir mettre en place en meme tps un multiserveurs ( au nbre de 2) de maniere a ne pas arreter le jeu si un serveur tombe en panne. Les clients doivent donc changer de serveur automatiquement en cas de probleme mais sans interrompre le jeu. Voila je suis ouvert a toutes propositions suceptible de m'aider. Bonne journee a tous.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

n'envoie JAMAIS 2 infos comme ça à la suite sur un winsock, comme dans ton exemple.
ou si vraiment t obligé, place un DOEVENTS entre tes envoies, ici donc entre les 2 w.senddata de ton bouton. Un programme c'est ligne à ligne, si tu as deux lignes qui se suivent sans pause, il ne peut pas descendre interprêter les evenements relatifs, sources d'erreur.
Le mieux avec winsock dans ces cas là, c'est de gérer une structure envoie/accusé de réception : tu envoies une infos à un wck, il la recoit la traite puis envoie un code pour faire comprendre à l'autre comme quoi il est pret pour la suite. L'autre la recoit puis envoie la suite et ainsi de suite... pigé ?
C'est pas sorcier vous verrez,
Tchao @+
albert0
Messages postés
249
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
9 août 2008

car voila ce j'ai essayer de faire:

dans un bouton:
W.SendData "P" & (Form1.nick.Text)
W.SendData "M" & (Form1.nick.Text & "> " & Text1.Text)

dans data arrival

Dim data As String
Dim Code As String * 1
W.GetData data
Code = Left(data, 1)
data = Right(data, Len(data) - 1)


Select Case Code
Case "P"
MsgBox data
Case "M" 'dans le cas d'une phrase
chat.SelStart = Len(chat.Text)

chat.SelText = vbCrLf & data
chat.SelStart = Len(chat.Text)
End Select

je met comme pseudo alberto et he test

mais dans le text box ki apparait il y a ecrit albertMalberto> le textquej'aienvoyer


c'est biizard je comprend pas pk sa fait ca , pourtant g suivi a la lettre ton tuto :/
albert0
Messages postés
249
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
9 août 2008

ouais c'est parfait, la j'ai mieu compris, mais j'ai encore quelque question :)
quand tu dit "disons qu'on décide de "P" pour le pseudo..." sa veu dire quoi que le pseudo du mec c'est P ou bien que P c'est justement pour identifer a la reception?? voila si c'est bien ca alors sa veu dire que

code = left(data,1) comme tu dit on va matter la premier lettre si c'est m ou p (Palbert0)

si non le reste c'ets ok :)

redsl chui long a la détente :)
a plus
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

ya pas de mal les gars !
Voici la marche à suivre :

on va suivre l'exemple simple proposé par albert0, à savoir l'envoi d'un pseudo puis l'envoie d'une phrase.

1° on a 2 type de données à envoyer/recevoir, on va donc définir 2 codes

2° disons qu'on décide de "P" pour le pseudo et de "M" comme message pour la phrase

3° quand on envoie le pseudo, on va le faire sous la forme suivante :
wck.senddata "P" & Variable_pseudo

4° pour la phrase, on va le faire sous la forme suivante :
wck.senddata "M" & Variable_phrase

5° à la réception, on reçoit tout dans une variable chaine, par exemple data avec : wck.getdata data

6° maintenant il s'agit de faire comprendre au programme qu'est-ce que contient data, à savoir ici, un pseudo, ou une phrase

7° on va donc récupérer le code, c'est à dire le premier caractère, qu'on va placer dans une variable Code, avec ces lignes :
dim Code as string * 1 'je déclare Code comme une chaine d'1 caract.
code = left(data,1) 'je récupère le premier caractère à gauche de data
data = right(data, len(data)-1) 'je retire le code de data, pour qu'il ne contienne QUE l'information transmise (phrase ou pseudo)

8° à la suite, je teste le Code reçu pour déterminer ce que je dois faire de ce qu'il reste dans data. J'utilise ci-dessous un "Select case" car ceci montre comment faire une structure propre si vous avez plus de 2 codes :
select case Code
case "P" 'dans le cas d'un pseudo
Zone_de_texte_pseudo.text = data
case "M" 'dans le cas d'une phrase
Zone_de_texte_phrase.text = data
end select

9° C'est assez clair comme ça ? ;)

Tchao @+
albert0
Messages postés
249
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
9 août 2008

j'ai le meme probleme moi: donc ce que je veu faire enfet c'est que j'envoi le pseudo .senddata "trlalala" et j'envoi un phrase .senddata"trululu" maintant pour l'envoi c'est ok mais pour la reception comment on fait pour mettre le pseudo dans le textbox 1 et la phrase dans le textbox2?? chui dsl celi mais j'ao po bien compris ca dans ton super tut
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

Code, explique EXACTEMENT ce que tu veux faire : je ne peux pas te faire un cours ou un exemple à partir de rien !
Donne ta situation, ton besoin etc, mais précisément...
@+
cs_code
Messages postés
3
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
20 février 2003

salut celiphane je suis toujour bloquer j'ai essai plusieur methode pour separe l'information meme j'ai créer une fonction qui identifier chaque caratere d'une chaine mais j'arrive pas a separer l'information du .GetData data
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

et toc !

lol, merci MirSPCM !

non je déconne, ba ouais j'avais pas pensé à tout ça non plus ! bien joué. Par contre a muri dans ma tête un autre argument et de taille lui aussi : quand on navigue sur le net, on utilise bien toujours le port 80. Quand vous ouvrez 36 fenetres IE (ou autres), qu'est-ce que vous croyez hein ? Que c'est les ports 80 81 82 83 ... qui s'ouvrent pour charger chaque fenetre simultanement ? ba non ca reste du 80 pour le http, donc si les pros qu'on créé tout ca font comme ca, c'est que ca doit etre tres bien comme ca ! (lol, quel argument !)

merci à tous pour toutes vos réactions sur ce tutorial, et bonne prog'

Tchao @+
MirSPCM
Messages postés
3
Date d'inscription
dimanche 16 décembre 2001
Statut
Membre
Dernière intervention
26 novembre 2003

celiphane :
Bravo :) C'est simpa de prendre du temps pour les gens :=)

FuSe :
Ta solutions poses entre autres les problemes suivants :
1) c'est plus lent et ça prends plus de bande passante.
2) En admetant que ton serveur derriere un routeur et que tu utilise PAT pour foward les ports.
Et bien dans ce cas si on utilise ta solution, il faut foward tous les ports nécessaire à l'execution de ton programme. Donc si ton prog gere 255 clients il faudra ouvrire 255 ports, et comme dans la plupart des cas on fait ça MANUELLEMENT c'est très chiant et très long.
et en + ça bouffe des ports que t'aurais pu rediriger sur une autre machine par exemple (mais bon c pas vraiment un probleme vu le nombre de ports ....)
Avec le multi-connect selon celiphane tu n'a besoin de foward qu'UN SEULE PORT et ça marche niquel meme derriere un routeur/firewall.

Voilà, et encore bravo celiphane pour le suivit :=)
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

Merci FuSe pour ton commentaire.

Je ne me vante pas d'être LA "connaissance incarnée" en matière de winsock, mais je trouve que l'exemple que tu m'as cité est une très mauvaise adaptation du multi-connect...
Car comme tu fais bien de le demander, le même port peut être utlisé sans aucun problème, et c'est pourquoi donc je qualifie la méthode que tu cites "mauvaise" : complication du code, temps perdu (en prog comme en temps machine, si infime soit-il de nos jours ;) ).
Je ne la trouve donc pas du tout "plus intelligente" comme tu le dis, mais bien plus "encombrante".

Mais comme je le signale plus haut, je n'impose rien à personne, libre à vous tous d'adapter ce code, si vous pensez qu'il le vaut mieux ! Mais cependant cette méthode elle celle utilisée par les winsockers...

Quoi qu'il en soit, bonne prog' à toi, FuSe, et à vous tous ! Tchao @+
cs_FuSe
Messages postés
18
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
10 juillet 2003

c'est pas mal ton truc mais sur ce site ou je ne sait plus trop où j'ai trouvé une source qui gère ( je trouve) plus intelligement la multi connection:
en fait le serveur est composé de deux controles winsock : 1 qui est par exemple sur le port 600 et un autre suivant ton exemple : à chaque connection il y en a un nouveau qui se crée.l'autre ce trouve en fait sur le port 600+1+nb de connections...
donc en fait le client (avec bien sur son petit controle winsock unique) se connecte sur le port 600.
alors le controle que l'on pourrai nommer "portinfo" accepte la connection, envoie un message ( par exemple "[port]" & numéro de port ).
le client alors en recevant ce message, se déconnecte du controle "portinfo" et se connecte (à la même adresse) avec le numéro de port indiqué par "portinfo".
bon j'explique juste ce que j'ai compris d'une source et ce n'ai pas de moi mais j'ai trouvé que c'était trés bien.
Mais après une relecture de ton exemple viens à moi une question, on peu avoir différents clients connectés sur le même port ?
Enfin voilà j'ai très peu de connaissance donc je n'oserai aller à l'encontre de celui&celle qui affronta euh dark side c ça son nom ???
En conclusion bravo pour votre tutorial, c'est bête que je l'aie pas vu avant j'aurai compris plus vite :)
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

peponr : un zip ? pq faire ? mettre du texte ? lol
eka808 : merci pour tes remerciements, quant à ton probleme, j'ai répondu à feedback, cette solution ne fonctionne-t-elle pas ? n'oublie pas de mettre un doevents, winsock à besoin de pause...
eka808
Messages postés
72
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
29 avril 2005

même problème que feedback...
seul le dernier connecté reçoit l'info
Merci de répondre, je ne comprends pas ce ki se passe.
a+ eka808
peponr
Messages postés
22
Date d'inscription
mercredi 20 novembre 2002
Statut
Membre
Dernière intervention
26 février 2003

un zip serai pas mal...
eka808
Messages postés
72
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
29 avril 2005

Bravo !
10/10 je comprends mieux winsock maintenant, merci !
olicool
Messages postés
16
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
5 mai 2003

je comprend beaucoup mieux le winsock merci
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

ba, avec le for each c'est bien aussi, moi j'aurais fais ça sinon :

dim i as integer
for i=0 to wck.count-1
wck(i).senddata "super exemple n'est-ce pas ?"
doevents
next i

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

???

Répond moi, j'ai pas testé avec le each. @+
cs_feedback
Messages postés
5
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
14 juillet 2003

SAlut comment tu fais pour envoyé un message avec winsock lorsque tu as un groupe de controle en winsock et que tu veux envoyé le meme message a toute les winsock du groupe de controle
Car moi avec winsock.senddata et un for il n'y a que le dernier control qui recoit de l'info .............. feedback
bydavid
Messages postés
62
Date d'inscription
samedi 21 septembre 2002
Statut
Membre
Dernière intervention
5 août 2003

10/10 J'avais pas trop compris le ctrl Winsock et maintenant je comprends ! Merci !
ja001net
Messages postés
10
Date d'inscription
jeudi 19 septembre 2002
Statut
Membre
Dernière intervention
1 août 2006

Merci beaucoup Celiphane pour cet excellent tutorial destiné aux debutants !!
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

merci à tous
En effet DocteurVB, Jockos a très bien répondu à ta question.
J'ajouterai sinon qu'il est vraiment bon de récupérer les données sous une STRING car ça a l'avantage de VIDER le buffer de réception. Ensuite, on a plus qu'à traiter le bazar. Sinon, si par exemple on prend sous la forme d'un LONG, et ben ça prendra que 4 octets. Evidemment, tout dépend de ce qu'on veut faire avec Winsock...

Clem > dsl mais l'UDP c'est pas ma tasse de thé, en fait je m'y suis même pas penché ! pt - être c très bien, pt - être pa !
Tchao !
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
J'ai oublié de noter...
Je mets 9/10 pour ce bon tutoriel de base sur Winsock...
jockos
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Winsock traite du flux d'octets (tout comme les Socket en C ou en Java)...
En recevant ce flux, tu le stock en mémoire vive sous la forme que tu veux (String, Integer...). Le mieux c'est d'utiliser une String ou le type Variant à la rigueur.

Pensez bien, que ce qui circule dans le tuyau n'est pas typé, ce sont des trames... disons plutôt des paquets IP contenant des morceaux du flux envoyé...
Le flux est une suite de "0" et de "1"... tout simplement
DocteurVB
Messages postés
211
Date d'inscription
lundi 19 août 2002
Statut
Membre
Dernière intervention
20 mai 2005

très bien se tutorial, très accessible, et bien construit...
seul une petit chose reste malgré tout dans l'ombre (c'est pour ça que j'ai mis 9 et pas 10) : dans cette sub,

§ Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
§ Dim data As String
§ Winsock.GetData data
§ MsgBox data
§ End Sub

comment un le ctrl winsock peut savoir ce qu'il va recevoir ?
je m'explique, le ctrl winsock recoit des octets, comment déterminé si ces octets correspondent a un type string, integer,Long...?
cs_Clem
Messages postés
282
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
12 février 2007

Oui, c'est une bonne idée de penser aux newbies, moi même, j'ai pris le winsock avec une source dont je ne comprenais rien, et qui est pplus était sans commentaires, bref, la galère pour les débutants.
Par contre, j'aimerais bien savoir comment l'UDP fonctionne, je sais que je peux paraitre en retard, mais c'est le prog auquel je veux me connecter qui est en retard !!
Toneivitch
Messages postés
5
Date d'inscription
mercredi 11 septembre 2002
Statut
Membre
Dernière intervention
19 octobre 2002

Oui c sympa de penser aux newbies, je trouve ca tres courageux de passer du temps a expliquer a des inconnus des trucs qui leurs rendent services
Merci beaucoup
cs_jeanyves
Messages postés
57
Date d'inscription
samedi 30 mars 2002
Statut
Membre
Dernière intervention
24 mars 2003

C'est vrai que c'est complexe mais il faut commencer par la base.... bravo d'avoir pensé aux débutants.