Chat tcp probleme de router -.-

ninja hacker Messages postés 45 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 19 mai 2008 - 12 oct. 2007 à 15:54
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 13 oct. 2007 à 20:48
Bonjour! =D

J'ai étudier la source produite ici : http://www.vbfrance.com/codes/PROGRAMME-CHAT_3026.aspx pour apprendre comment faire un chat tcp. Voila j'ai réussit a faire marcher la source (il y avait un petit probleme avec les textbox) et finalement jarrive a un probleme plutot majeur... Je peux faire des connexion local sur un meme pc ou sur deux ordi sur le résaux local. Maintenant j'aimerais pouvoir faire marcher mon chat sur des ordinateurs distants possedant un routeur. Ce qui complique les choses. Voila je ne sais pas si vous avez une meilleur source que ce que jai pour faire ce que je veux mais si oui donné moi la :P sinon pouvez vous m'aidé a faire marché mon chat d'un pc a un autre. MERCI

pour c'eu qui ne veulent pas download la source ou qui veulent voir mes modifs  voicie les codes

Client :
Public

Class Form1

Inherits System.Windows.Forms.Form

Dim txtValue
As
String =
""

Dim
WithEvents Client
As
New TcpLibrary.TcpClient

Private
Sub txtWrite(
ByVal texte
As
String)

Me.txtChat.Text = texte

End
Sub

Private
Sub btnConnect_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnConnect.ClickClient.Connect(txtSvr.Text, txtPort.Text)

txtWrite(

"Connexion...")

End
Sub

Private
Sub Client_DataArrival(
ByVal available
As
Long)
Handles Client.DataArrival

Dim Tampon
As
String = Client.GetLine()

Do
While Tampon <>
""txtValue = Tampon

Tampon = Client.GetLine()

Loop

End
Sub

Private
Sub btnSend_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnSend.ClickClient.SendData(txtSend.Text & vbNewLine)

txtClear()

End
Sub

Private
Sub txtClear()txtSend.Clear()

End
Sub

Private
Sub btnDeconnect_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnDeconnect.ClickClient.Close()

End
Sub

Private
Sub Timer1_Tick(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Timer1.Tick
If (txtValue "")
False
ThentxtChat.Text = (txtChat.Text & txtValue)

End
IftxtValue =

""

End
SubEnd

Class

Serveur :
Public

Class Form1

Inherits System.Windows.Forms.Form

' On créé un objet serveur

Dim
WithEvents Serveur
As
New TcpLibrary.TcpServer() 

Private
Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click

' On met le port indiqué dans TextBox1Serveur.Port(TextBox1.Text)

' Et on écoute sur le portServeur.StartListen()

End
Sub

' Le client connecté est passé en argument (Client)

Private
Sub Serveur_Connected(
ByVal Client
As TcpLibrary.TcpSocket)
Handles Serveur.Connected

' Quand un client s'est connecté on lui demande son pseudo

' Tout les envois doivent se terminer par vbNewLine (retour à la ligne)Client.SendData(

"Bienvenue, veuillez entrer votre Pseudo" & vbNewLine)

End
Sub

' Le client qui vient d'envoyer les données est passé en argument (Client)

Private
Sub Serveur_DataArrival(
ByVal Client
As TcpLibrary.TcpSocket,
ByVal Available
As
Long)
Handles Serveur.DataArrival

' On regarde si une ligne se terminant par vbNewLine n'est pas disponible, si oui on la stocke dans Tampon

Dim Tampon
As
String = Client.GetLine()

Do
While Tampon <>
""

' Tant qu'il y en a on les traiteTraite(Tampon, Client)

Tampon = Client.GetLine()

Loop

End
Sub

' Traite les données qui viennent d'arriver

Public
Sub Traite(
ByVal Data
As
String,
ByVal Client
As TcpLibrary.TcpSocket)

' La propriété Tag du Client sert à stocker ce que l'on veut, ici on s'en sert pour stocker le pseudo de chaque client

' Si l'utilisateur n'a pas de pseudo on lui met celui qu'il vient d'envoyer

If Client.Tag =
""
Then

' On enlève le retour à la ligne et on stocke dans TagClient.Tag = Microsoft.VisualBasic.Left(Data, Len(Data) - 2)

Client.SendData(

"Votre pseudo est maintenant " & Data)SendAtAll(Client.Tag &

" est connecté" & vbNewLine)

' Si l'utilisateur a un pseudo on envoie son message à tous

ElseSendAtAll(

"<" & Client.Tag &
"> " & Data)

End
If

End
Sub

' Envoie un message Data a tout les clients connectés

Public
Sub SendAtAll(
ByVal Data
As
String)

Dim Client
As TcpLibrary.TcpSocket

' La propriété Clients du serveur est une collection qui contient tout les clients connectés

' Avec For Each, on a donc acces à tout les clients connectés

For
Each Client
In Serveur.ClientsClient.SendData(Data)

Next

End
Sub

' On choisit si on veut une nouvelle connection en changant la valeur de Accept

Private
Sub Serveur_Request(
ByRef Accept
As
Boolean)
Handles Serveur.Request

' Si il y a déjà 4 client connectés on refuse la nouvelle connection

If Serveur.Clients.Count > 4
ThenAccept =

False

End
If

End
Sub

' Le client qui vient de se déconnecter est passé en argument (Client)

Private
Sub Serveur_Disconnected(
ByVal Client
As TcpLibrary.TcpSocket)
Handles Serveur.Disconnected

' On indique à tout le monde qu'il s'est déconnectéSendAtAll(Client.Tag &

" a quitté le chat" & vbNewLine)

End
SubEnd

Class

MERCI D'AVANCE!

10 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 oct. 2007 à 17:07
il faut que tu ailles dans la config du routeur et que tu routes le port par exemple 987 sur la machine que tu veux que le chat tourne.
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
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 oct. 2007 à 17:46
Salut
Tape "routeur" dans le moteur de recherche parmi les questions du forum et tu découvrira plein de questions et de réponses à ce sujet.

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)
0
ninja hacker Messages postés 45 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 19 mai 2008
12 oct. 2007 à 23:57
Merci pour les réponses.

Après un peu de recherche j'en suis vite venus a la conclusion qu'il faut que mon routeur redirige mon paquets vers l'ordi avec qui je chat. Donc metons le routeur écoute le port 88. quand il recoit qqchose au port 88 il lenvoit au port 88 d'un des pc du réseau et la mon logiciel fait le rest. C'est bien tout ca. mais jai pas envie d'aller configurer le routeur chez tout les gens qui veulent utuliser mon chat. Alors je me demandais y a t-il un moyen de faire un code vb qui s'occupe de configurer le routeur? sinon quelle language pourais le faire (si un autre langage peut le faire bien sur). Merci de vos réponses!
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
13 oct. 2007 à 00:11
tout dépendra du routeur !
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
0

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

Posez votre question
ninja hacker Messages postés 45 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 19 mai 2008
13 oct. 2007 à 03:35
Si on supose que j'ai un routeur netgear comment pourais-je faire du "port fowarding"?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
13 oct. 2007 à 08:34
si c'est un netgear, tu vas dans le frame de gauche et tu cherches Services
tu en ajoutes un au port ex 88 avec un nom genre Chat
puis tu vas dans l'autre menu, je crois que c'est Redirection et tu ajoutes une ligne en précisant que le service est Chat
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
0
ninja hacker Messages postés 45 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 19 mai 2008
13 oct. 2007 à 19:13
est-ce possible de faire ceci avec un code VB? ou est-il possible de partager un port avec une autre aplication? (msn par example)
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
13 oct. 2007 à 20:25
oui mais il faut BEAUCOUP de courage ...
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
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
13 oct. 2007 à 20:46
Salut
Non, on ne peut pas "partager de port" avec une autre application.
Un port est à usage unique. Si deux applications tournent sur le même PC, elles ne pourront pas utiliser le même port (écoute ou connexion)
Par défaut, ton routeur refuse toutes les requètes externes. Une requète TCP fournit toujours le numéro de port sur laquelle elle veut se connecter. Cela ne concerne que les requètes entrantes (internet vers chez toi), les requètes sortantes sont libres.
Le rôles des "port forwarding" ou "NAT" est de déclarer au routeur les exceptions.
Il faudra lui dire que si qqun veut entrer sur le port X, il laisse passer cette requète et la transmette au PC du réseau intenre donc l'adresse IP est Y, et optionnellement sur le port Z de cette machine (au cas où tu voudrais modifier le numéro du port par la même occasion).
X et Y doivent être donnés lors de ce paramétrage

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)
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
13 oct. 2007 à 20:48
PS : Il y a pas mal d'explications à ce sujet sur www.commentcamarche.net
0
Rejoignez-nous