Connexion avec winsock

Messages postés
12
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
20 juillet 2012
- - Dernière réponse : cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 30 janv. 2008 à 00:05
Salut
je viens de débuter en visual basic et j'ai commencé par créer une petite application client-serveur avec winsock et j'ai essayé d'envoyer le client à un ami et moi j'ai conservé le serveur. Mais quand nous avons voulu les utiliser ca na pas marcher et je pense que la connexion n'est pas établie entre moi et lui sachant que nous avons utiliser le même port mais en ce qui concer l'IP j'en connais pas beaucoup s'il vous plait si quelqu'un peut m'aider si vous voulez je peux poser le code de mon programme
merci d'avance

System Replaced,Cast Changed,Security Enabled ,And Linux Friendly

Buy it, use it, break it, fix it, Trash it, change it, melt - upgrade it, Charge it, pawn it, zoom it, press it,
Snap it, work it, quick - erase it
Afficher la suite 

18 réponses

Messages postés
527
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
10 octobre 2013
0
Merci
Salut,

sans code, difficile de t'aider en effet.

 Pourapprendretoujoursplus!
Commenter la réponse de mstarsup5
Messages postés
12
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
20 juillet 2012
0
Merci
dac je vais mettre le code
voila celui la est pour le client
rivate Sub connecter_Click()
client.RemotePort = port.Text
client.RemoteHost = hostname.Text
client.Connect
End Sub

Private Sub client_DataArrival _
(ByVal bytesTotal As Long)
Dim data As String
client.GetData data
If recu.Text <> "" Then
recu.Text = ""
recu.Text = data
Else
recu.Text = data
End If
envoi.Text = ""
End Sub

Private Sub envoyer_Click()
client.SendData envoi.Text
End Sub

et celui est du serveur

Private Sub Command1_Click()
server.LocalPort = port.Text
server.Listen
End Sub

Private Sub Command2_Click()
server.SendData envoi.Text

End Sub

Private Sub server_ConnectionRequest _
(ByVal requestID As Long)
If server.State <> sckClosed Then _
server.Close
server.Accept requestID
End Sub

Private Sub server_DataArrival _
(ByVal bytesTotal As Long)
Dim data As String
server.GetData data
If recu.Text = "" Then
recu.Text = data
Else
recu.Text = ""
recu.Text = data
End If
envoi.Text = ""
End Sub

je tiens à vous dire que ca marche sur mon pc le client et le serveur mais sur internet non

System Replaced,Cast Changed,Security Enabled ,And Linux Friendly

Buy it, use it, break it, fix it, Trash it, change it, melt - upgrade it, Charge it, pawn it, zoom it, press it,
Snap it, work it, quick - erase it
Commenter la réponse de cs_ahmedbj
Messages postés
14595
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 novembre 2019
137
0
Merci
Bonjour

Ne marque pas réponse acceptée si ton pb n'est pas solutionné.

Pour ton pb, tu passe par une box ou internet ?

Quel IPs avez-vous utilisées ?

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Commenter la réponse de NHenry
Messages postés
14595
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 novembre 2019
137
0
Merci
Bonjour

Bon, je me suis fait grillé pour mon précédent message

Si tu passe par une Box, il faut que tu la configure pour que la box du serveur accepte les connexion (fasse le lien entre le port d'Internet et le port sur une machine particulière.

Ensuite avec un site comme : http://www.adresseip.com/ récupère l'IP publique du serveur.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Commenter la réponse de NHenry
Messages postés
527
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
10 octobre 2013
0
Merci
Salut,

Private Sub client_DataArrival _
(ByVal bytesTotal As Long)
Dim data As String
client.GetData data
If recu.Text <> "" Then
recu.Text = ""
recu.Text = data
Else
recu.Text = data
End If
envoi.Text = ""
End Sub

ce qu'il y a en rouge ne m'a pas l'air nécessaire.
Essaie de mettre des msgbox après Private Sub server_ConnectionRequest _
(ByVal requestID As Long) (côté serveur) et après Private Sub client_DataArrival _
(ByVal bytesTotal As Long)
Dim data As String
client.GetData data (côté client)

 Pourapprendretoujoursplus!
Commenter la réponse de mstarsup5
Messages postés
527
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
10 octobre 2013
0
Merci
oui, aussi vérifie que tes IP sont les bonnes (ie: une machine peut avoir plusieurs IP. C'est notamment le cas si l'ordinateur est sur un réseau, etc...)
De plus, si vous êtes tous les deux sur deux réseaux défférents (lui sur un réseau, et toi sur un autre réseau), il faut régler ton routeur pour qu'il dirige les entrées sur le port que tu as choisi pour la connexion sur ta machine. (ça je ne sais pas faire)
Dans tous les autres cas, ça devrait passer.

 Pourapprendretoujoursplus!
Commenter la réponse de mstarsup5
Messages postés
12
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
20 juillet 2012
0
Merci
et comment je fais pour la configurer?

System Replaced,Cast Changed,Security Enabled ,And Linux Friendly

Buy it, use it, break it, fix it, Trash it, change it, melt - upgrade it, Charge it, pawn it, zoom it, press it,
Snap it, work it, quick - erase it
Commenter la réponse de cs_ahmedbj
Messages postés
527
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
10 octobre 2013
0
Merci
Tu es sur un réseau local et lui est sur un autre réseau local? (Sinon, pas de problème..)

 Pourapprendretoujoursplus!
Commenter la réponse de mstarsup5
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
dans les parametre de ton routeur (http://192.168.0.1 par exemple)
Commenter la réponse de Renfield
Messages postés
12
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
20 juillet 2012
0
Merci
chacun de nous a sa propre connection internet à domicile pour la configuration je sais pas comment faire, car je connais pas le language VB j''ai seulement fais des recherche sur internet et j'ai essayé de mettre de la valeur ajouté en faisant une petite relation avec ce que j'ai appris en C .
si quelqu'un peut m'expliquer encor plus car je ne sais pas comment faire, aussi comment faire pour la "box serveur"
merci

System Replaced,Cast Changed,Security Enabled ,And Linux Friendly

Buy it, use it, break it, fix it, Trash it, change it, melt - upgrade it, Charge it, pawn it, zoom it, press it,
Snap it, work it, quick - erase it
Commenter la réponse de cs_ahmedbj
Messages postés
527
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
10 octobre 2013
0
Merci
chacun de nous a sa propre connection internet à domicile pour la configuration je sais pas comment faire, car je connais pas le language VB j''ai seulement fais des recherche sur internet et j'ai essayé de mettre de la valeur ajouté en faisant une petite relation avec ce que j'ai appris en C .


Encore une fois, êtes vous sur des réseaux locaux chez vous? (ie: avez vous (tous les deux) plusieurs ordinateurs connectés à internet?)  Si non, pas besoin de régler quoi que ce soit, il te suffit d'avoir les bonnes IP et ça devrait marcher.

 Pourapprendretoujoursplus!
Commenter la réponse de mstarsup5
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
Commenter la réponse de Renfield
Messages postés
12
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
20 juillet 2012
0
Merci
moi je suis sur un sous réseaux mais lui non

System Replaced,Cast Changed,Security Enabled ,And Linux Friendly

Buy it, use it, break it, fix it, Trash it, change it, melt - upgrade it, Charge it, pawn it, zoom it, press it,
Snap it, work it, quick - erase it
Commenter la réponse de cs_ahmedbj
Messages postés
12
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
20 juillet 2012
0
Merci
si par exemple je veux me connecter avec "Renfield" ou bien "mstarsup5" alors que dois-je faire ?
System Replaced,Cast Changed,Security Enabled ,And Linux Friendly

Buy it, use it, break it, fix it, Trash it, change it, melt - upgrade it, Charge it, pawn it, zoom it, press it,
Snap it, work it, quick - erase it
Commenter la réponse de cs_ahmedbj
Messages postés
527
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
10 octobre 2013
0
Merci
Si toi tu es sur un réseau, si tu ne veux pas t'embêter avec ton routeur, il faut que ça soit toi qui sois le client et lui le serveur.

 Pourapprendretoujoursplus!
Commenter la réponse de mstarsup5
Messages postés
527
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
10 octobre 2013
0
Merci
(je t'explique: si c'est toi qui joue le serveur, quand son ordinateur va chercher à appeler le tien pour se connecter, il va pas savoir ou aller par le routeur.
Si tu es le client, c'est toi qui vas l'appeler de suite, tu n'auras pas de difficulté à trouver son ordi puisqu'il est seul, et une fois le contact établi, la connexion sera faite entre ton ordi et le sien, donc plus de problèmes pour lui d'atteindre ton ordi.)
Ps: n'oublie pas non plus qu'il te faut la bonne IP pour établir la connexion... mais normalement il ne devrait en avoir qu'une puisqu'il n'est pas sur un réseau local, donc winsock devrait fournir la bonne.

 Pourapprendretoujoursplus!
Commenter la réponse de mstarsup5
Messages postés
616
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012
0
Merci
Voila ce qui se passe en essayant de vulgariser au maximum :


Pour assurer une connexion entre machine par winsock il faut au minimum deux choses, une machine à l’écoute sur un port précis, soit le slave, et une autre machine qui veut bien causer sur ce port soit le master. Il faut bien évidement que les deux machines soient sur le même réseau, et qu’elles se voient (test avec ping). La ou ça se complique c’est dès que l’on essaye de faire communiquer deux machines qui sont sur des réseaux différents, ce qui est le cas lorsque les PC doivent communiquer par winsock au travers d’internet, je m’explique :


Mon PC1, IP 192.168.1.1 est le master et émet des data sur le port 49160 , mon PC2 IP 192.168.1.2 est le slave et écoute tout ce qui vient du port 49160, tout se passe bien (bien sur j’ai ouvert le firewall de PC1 et PC2 pour l’utilisation de ce port), alors je me dis je vais envoyer la partie cliente de mon application à un pote et voir si il reçoit les data que j’envoie sur le port 49160 et là ça ne marche pas, pourtant mon ami a bien configurer son réseau et utilise aussi une adresse IP de type 192.168.1.3 donc compatible avec les miennes ??


Voyons de plus près ce qui cloche :


Mon réseau interne est bien dans le range 192.168.1.0, mais ce sont des adresse IP dites privées c.a.d j’aurais tout aussi bien pu utiliser 172.16.0.0 et attribué des adresse de ce range à mes machines cela aurais fonctionné. Ceci est différent lorsque mon réseau interne est connecté à Internet, je ne peux pas adopté n’importe quel adresse puisque je ne sais pas si celle-ci est déjà utilisée par quelqu’un d’autre c’est donc mon provider qui m’attribue une adresse unique sur la toile, dite adresse publique. Ok c’est bien beau mais comment faire en sorte que mes différentes machines communiquent en local entre elles, mais aussi se connectent à Internet ? c’est le rôle du router, cette boite entre ma prise adsl et mon switch ou mes PC selon le cas. Ce router fais office de frontière entre mon réseau local 192.168.1.0 et mon adresse publique 247.56.12.212 il fait une translation d’adresse (NAT) c.a.d que lorsque PC1 demande une page Internet le serveur de cette page l’envoi à l’IP 247.56.12.212 et c’est mon routeur qui la redirige vers PC1 en 192.168.1.1 tout comme il le ferai pour PC2 si s’étais lui l’initiateur de la demande. Dans le cas d’une application client serveur par winsock, pour que le PC slave qui se trouve chez mon pote aie une chance de voir ce qui arrive sur le port 49160  il faut donc configurer d’une part le firewall de son routeur pour qu’il accepte ce port, mais également paramétrer le routeur pour qu’il redirige tout ce qui vient de ce port sur l’adresse IP privée de son PC.

Désolé pour les fautes d'orthographe je suis moins doué pour le français

Pluplu
Commenter la réponse de cs_pluplu
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Salut
Question conne : Ton programme fonctionne t-il quand tu fais marcher le client et le serveur sur le même PC en donnant l'adresse IP interne 127.0.0.1 ?
Si non : Commence par là
Si oui :
Pour que ton Serveur reçoive la demande de connexion de ton client, il faut que le routeur (boite entre ton PC et l'internet) ne bloque pas la demande (c'est son métier).
Pour cela, il faut aller modifier le paramétrage du routeur côté serveur et lui dire dans "les règles NAT" que si une connexion arrive sur le port X (que tu as choisi), il faut qu'il la transmette sur le réseau interne à destination du PC (adresse IP interne) qui fait tourner le programme serveur.
Après, il suffit que le client essaye de se connecter avec ce numéro de port sur l'adresse IP internet ( www.whatismyip.com ) du serveur.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack