VB.net [Winsock] Client - Serveur

TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010 - 10 mai 2010 à 23:06
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012 - 12 mai 2010 à 14:34
Bonjour, Bonsoir,

J'explique mon petit projet.
J'ai crée un programme client et un serveur, il marche bien
quand je me connecte en local sur l'ordi de mon frère et ma mère
je met l'adresse ip local, la connexion réussie très bien !

Le problème c'est juste que quand je veux me connecter à un pc
à distance qui est en dehors du local,
exemple : le pc d'un amis, la connexion ne marche pas.

Winsock fonctione t-il uniquement en Local ? Si il fonctionne aussi
en distance, merci beaucoup de m'aider.

Amicalement, Imad.

23 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 mai 2010 à 00:17
Salut
Ne t'inquiète pas, il fonctionne aussi "over the net".
C'est une question de protection des routeurs.

Lorsqu'un client veut se connecter au serveur, il doit fournir l'adresse IP du serveur, ainsi que le port sur lequel le serveur est en tain d'attendre les connexions.

D'office, les routeurs refusent les demandes de connexions entrantes.
Il faut donc demander au routeur d'accepter le transfert d'une demande vers le PC qui, sur le réseau local, à office de serveur.

Supposons que ton PC ait l'adresse IP locale 192.168.1.11 et que ton logiciel serveur attende les connexions sur le port 1234.
Il faut aller dans les règles NAT de ton routeur (côté serveur) et définir une règle qui dise que :
Quand une demande de connexion arrive sur le port 1234, il faut transférer cette demande au PC 192.168.1.11, sur ce même port 1234.

Côté client, rien à faire de particulier, les connexions sortantes ne sont pas filtrées par les routeurs.

Option parefeu :
Quand tu as lancé ton logiciel serveur, le parefeu (*) a dû te demander ton accord pour autoriser "l'écoute" sur le port 1234.
(*) Parefeu Windows ou celui intégré à un logiciel antivirus, par exemple - tous les antivirus ne font pas office de parefeu - se renseigner chez le fabricant.
Hors mis le parefeu de Windows qui est une passoire sans nom dans les transactions sortantes, les parefeux dignes de ce nom nécessite aussi une autorisation pour émettre vers le Net.

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 12:02
Bonjour,

Merci beaucoup d'avoir répondu mais tu peux
m'aider ? Car c'est un peu compliqué pour moi

Comment je fais pour que le routeur accepte les connexions comme tu as dis ?

Et comment règler les NAT côté serveur ? STP

En gros faut que je rajoute quoi comme code
pour le serveur, pour qu'il marche en local et en dehors de local ?

MERCI BEAUCOUP !
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
11 mai 2010 à 12:23
bonjour
tu n'a pas de code à ajouter, tu doit configurer ton routeur,
exemple dans la propriété de ta connexion de trouve la passerelle par défaut, généralement c'est l'adresse de ton routeur, exécute la dans le navigateur
exemple: "http://192.168.1.1"
Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 12:43
bonjour,

j'ai essayer d'éxecuter l'ip dans la navigateur
comme tu as dis, mais ça fait connexion echoué
ça marche pas . :s

mais le problème c'est que je dois configurer mon routeur ou celui de la personne qui ouvre le serveur ?

et comment fait - on pour configurer un serveur ? svp

je suis un peu perdu en ce qui concerne ça
c'est la 1ère fois que je fais un client/serveur.
0

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

Posez votre question
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
11 mai 2010 à 14:17
tu va ici [www.monip.org www.monip.org] tu prend ton ip et tu l'exécute dans le navigateur, tu te trouve dans la page de ton routeur, la configuration change d'un routeur à un autre, et pour configurer un serveur chez un client c'est presque impossible vue qu'il n y a pas de manière standard à le faire.

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 mai 2010 à 15:32
Je corrige le nom du site proposé par lediablo : www.monip.org
0
TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 16:45
J'essaye d'éxécuter mon ip dans mon navigateur

mais ça marche pas ...

Et qu'est-ce que je dois faire en faite ?

Vous pouvez être très précis car là

je suis perdu ... :s
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
11 mai 2010 à 17:23
merci jack j'ai pas fait attention
teamed sa doit marché ton ip
tu peut me dire comment ta procéder ?
exemple: sa te demande un login et mot de passe du routeur


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
11 mai 2010 à 17:25
je profite de ta présence jack vue que tu es la personne qui répond souvent quand il s'agit des sockets, y a pas un moyen de connecté deux socket sans configurer le routeur ? ou un port ouvert par défaut ?

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 18:19
j'ai mit http://82.227.**.** enfin voilà mon ip

et ça me dit ça :

Forbidden
You don't have permission to access this file on this server.
Cheyenne/2.2.8 Server at localhost Port 80


je suis vraiment dégouter

quelqu'un aurait un msn pour discuter plus rapidement ? svp

car là c'est urgent et j'arrive pas du tout à m'en sortir... :S
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
11 mai 2010 à 18:59
vide le cache de ton navigateur et réessaie et sa va marché


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
11 mai 2010 à 19:00
ou bien change le navigateur voila


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 19:17
aiiie ça ne marche paaas pour l'ip
DE PLUS :

les 3/4 des gens qui veulent ouvrir mon serveur me disent que l'application leur fait:
"l'application à cessé de fonctionner" ...

mon programme beug comme ça je comprend pas pourquoi mais a des personnes non ...

j'ai vraiment trop de problème il me faudrait une aide très avancer svp ... :S
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
11 mai 2010 à 19:19
une aide très avancer

sa dépendra de tes explication et du code que tu va nous montré


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 19:31
Oui tu as raison, je suis très bête je vais
donner le code, ça se trouve que le problème
vient d'ici ...

donc voici le code pour mon programme CLIENT

CLIENT:

Imports System.Net
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Winsock1.Close()
        Winsock1.Connect(TextBox1.Text, TextBox2.Text)
        Statut.Text = "Statut : Connexion en cours ..."
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Winsock1.SendData(TextBox3.Text)
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Winsock1.LocalIP
    End Sub

    Private Sub Winsock1_CloseEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles Winsock1.CloseEvent
        Statut.Text = "Statut : Deconnecté"
    End Sub

    Private Sub Winsock1_ConnectEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Winsock1.ConnectEvent
        Statut.Text = "Statut : Connnecté"
    End Sub

    Private Sub Winsock1_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Winsock1.DataArrival
        TextBox1.Text = Winsock1.LocalIP
        Winsock1.GetData(TextBox1.Text)
    End Sub

    Private Sub Winsock1_Error(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent) Handles Winsock1.Error
        Statut.Text = "Statut : Erreur de connexion"
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Winsock1.Close()
        Statut.Text = "Statut : Deconnecté"
    End Sub
End Class


*****************************************
Et pour mon Serveur;

SERVEUR:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Winsock1.LocalIP
        Winsock1.LocalPort = "7890"
        Winsock1.RemotePort = "7890"
        Winsock1.Listen()

    End Sub

    Private Sub Winsock1_CloseEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles Winsock1.CloseEvent
        Winsock1.Close()
        Winsock1.Listen()

    End Sub

    Private Sub Winsock1_ConnectEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Winsock1.ConnectEvent

    End Sub

    Private Sub Winsock1_ConnectionRequest(ByVal sender As Object, ByVal eventargs As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles Winsock1.ConnectionRequest
        Winsock1.Close()
        Winsock1.Accept(EventArgs.requestID)

    End Sub

    Private Sub Winsock1_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Winsock1.DataArrival
        Winsock1.GetData(Label1.Text)
        MsgBox(Label1.Text)
    End Sub
End Class
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 mai 2010 à 20:39
@ lediablo :
Par défaut, aucun port n'est ouvert en entrée sur un routeur
A ma connaissance, je n'ai jamais vu de programme capable de modifier les règles NAT d'un routeur lambda, les dialogues étant particuliers à chaque marque.

@ TeamED :
Sur quel genre de réseau es-tu ?
Sur un réseau à la maison ou bien sur un réseau d'entreprise ?
Maison :
Quel fournisseur d'accès ?
Entreprise :
Dans ce dernier cas, oui, c'est normal que tu ne puisses accéder au paramétrage du routeur et là, aucune autre solution que de demander au gestionnaire du réseau d'ouvrir ce port et de le rediriger vers ta machine - l'espoir fait vivre.

Dans ton code :
Reproche : Tu as gardé les noms des objets comme TextBox1 : Impossible pour nous de savoir ce que cela peut représenter (on va le deviner, mais ça va encore être des pertes de temps incommensurables)

Quand tu connectes un client à un serveur, on ne précise QUE l'IP du serveur et le port.
N'impose pas de LocalPort, il en choisira un tout seul parmi ceux qui sont libres - ça n'a aucune influence sur le reste.

Dans le Form_Load, je vois TextBox1.Text = Winsock1.LocalIP
Comme ça, tu ne te connecteras pas à un serveur distant mais à ta propre machine.

Si TextBox1 est l'adresse IP de ton serveur, je ne comprends pas pourquoi tu lui envoies Winsock1.GetData(TextBox1.Text) - ça n'a pas beaucoup de sens.
Est-ce que tu as chargé au moins une source du site qui parle de Winsock ?
Je te recommande vivement cette lecture : elle répondra à toutes ces questions fonctionnelles (vbfrance n'est pas un centre de formation individuel)

En dernier point, sache que, si ton client et ton serveur tournent sur la même machine, tu ne peux pas te connecter au serveur en ciblant l'adresse IP publique (celle d'internet), cela ne pourra fonctionner qu'avec l'adresse IP du réseau interne.
Tu ne pourras utiliser l'adresse IP publique seulement si les programmes serveur et client tournent sur des machines différentes.

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 mai 2010 à 20:43
D'après ton IP, tu es chez Free.
Je ne connais pas leur routeur, désolé, mais il doit bien y avoir des sites qui parlent de routeur free et de règles NAT, comme <ce site> simplement trouvé en tapant "free routeur regle nat" sur mon moteur de recherche favori.
0
TeamED Messages postés 9 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 12 mai 2010
11 mai 2010 à 20:51
Oui, je suis chez Free en réseau Maison.

Je vais essayer de me renseigner sur le site que tu m'as donné même si m'a l'air très compliqué à tout faire ... :S

Par contre j'ai un autre problème qui s'impose à moi, certaines personnes qui essaye d'ouvrir mon serveur ça leur fait "le programme à cessé de fonctionner" alors que d'autre le programme s'ouvre...

C'est vraiment bizarre j'ai jamais autant galérer pour un projet en VB.net ...
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 mai 2010 à 09:41
Compliqué : Bah oui et non, suffit de bien comprendre comment cela fonctionne

"le programme à cessé de fonctionner"
C'est un message du système, ça ? ou un message que ton propre programme affiche ?

Tel que tu as écrit ton programme, tu ne peux avoir qu'un seul client connecté à ton serveur.
Multi-clients --> Charge des sources qui parlent de "chat" et analyse comment faire, le forum n'étant pas un centre de formation.

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
12 mai 2010 à 10:51
merci jack


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
Rejoignez-nous