Une petite explication pour le chat multi clients (pas sous le même reseau)

Résolu
fredy103 Messages postés 10 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 2 septembre 2005 - 1 sept. 2005 à 22:49
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 2 sept. 2005 à 17:31
Salut tous.


Je débute en vb, j'aimerai bien commencer un petit projet de chat mais avant de passer au chose sérieuse j'aimerai tout avant savoir comment ça se fait comme dans msn, même si on est nombreux sous un réseau local chaqu'un parvient à recevoir son propre message qui est destiné à lui? Je sais que chaque client a sa propre ip du genre 192.168... et tous ayant la même adresse ip dite externe que le routeur prend (je me demande d'ailleurs si c'est bien juste tout ça??) alors quand une personne d'un autre pays envoit le message à x, qui est sous un reseau local, x reçoit ce message?

Merci de bien éclairer ma laterne.
A voir également:

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 sept. 2005 à 23:40
salut
le routeur contient le NAT (Network Adress Table).
quelqu'un joint un poste sur ton réseau. il joint l'IP externe (ou publique), tombe sur ton routeur. mais il ne fait pas que joindre le routeur, il l'appelle avec le port. et c'est ce routeur qui, selon ce port, reli sa table NAT et transfère au poste correspondant.

donc 80.81.82.83:1000 va te joindre en 193.252.160.162:2010
le routeur voit 2010. ton appli fonctionne sur le port 16450.
tu as configuré sur le routeur que s'il reçoit un message en 2010, il redirige sur 192.168.0.55:16450

en gros c'est le principe

PCPT
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 sept. 2005 à 01:41
re,

bah schématiser... c'est pas évident....

tiens?

tant chez les particuliers qu'en entreprise, quelqu'un (disons l'admin) s'occupe de configurer le routeur afin de permettre ou non l'émission réception vers/à l'extérieur.

si MSN fonctionne, c'est que le routeur l'autorise, et donc que l'admin redirige le port MSN entrant vers la personne concernée.
(les utilisateurs sont traduits FORCEMENT aussi en sortie)
parfois (par exemple), les visio-conférences ne fonctionnent pas. celà est du au fait qu'il y a aussi à prendre en compte les spécificités des routeurs eux-même. pour ce cas spécifique, c'est le BroadCast (multidiffusion).

si tu veux un messenger universel, TCP/IP n'est plus adapté, du justement aux différences matériels, plate-forme, etc....
il faut maintenant se rabattre sur le protocole SIP (celui utilisé pour le VOice IP)

mais là, çà va t'embrouiller encore plus....

à la limite, tout çà, tu n'as pas trop à le prendre en compte.
si tu débutes et que tu veux juste faire un petit messenger, A contacte B. çà s'arrête là. A est alors le client, et B le serveur.
le serveur écoute, le client appel
c'est le protocole TCP/IP ou UDP. des tonnes de sources sont à ta disposition.

j'espère que c'est un petit peu plus clair.
dit moi comment t'orienter, je ferais mon possible

++
PCPT
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 sept. 2005 à 03:07
content si çà t'éclaire un peu.

quand je dis de pas trop t'emmerder avec cette histoire de NAT, c'est parce que justement, avec Winsock :

(c'est un exemple de conception)

tu créés d'abord une application serveur (indépendante) joignable par tous (multi sous-réseaux Lan), sur un port commun.
ce serveur ne te sert qu'a authentifier et dire qui est où, donc concerver les IP + pseudos (au minimum)
ensuite, chaque client qui se connecte apparait donc dans la liste de chacun (je parle uniquement de Lan, pas de Wan)

A (192.168.0.50) va donc se connecter au serveur S (192.168.0.10:6543)
S authentifie donc A, et A reste connecté à S.
S lui envoie sa liste, etc.. c'est cool

B (10.0.0.240) a fini de compter les post-it qui recouvrent son écran. il les décole, les jete, et ajoute un mot sur le tableau de service "Veillez fermer les fenêtre de mon bureau quand je n'y suis plus ; mes mémos ont disparus".
il a enfin assez de place (et de temps) pour joindre S

coté technique, tu as le winsock sur le serveur (que je vais nommer WSKs) qui est indexé (donc WSK(0) .... (1)...(2)...).
quand WSK(0) reçoit un appel, il le bascule sur l'index libre suivant. donc en l'occurence, A est sur le 1, et B arrive, donc se connecte sur le (0) qui le rebascule en (2). tu trouveras sans doute des sources.

donc (dur dur de pas perdre le fil), B (IP ci-dessus) contacte S (192.168.0.10:6543).
S est super content (bah ouai, un seul client, c'est un peu déprimant). il envoie le nouveau connecté (B) à tous les connectés (que A), et tous les connectés (que A) à B (le dernier )

donc S est le serveur, A et B sont des clients.
B veut parler à A.
A doit être serveur pour recevoir l'appel.
2 solutions :

un peu complexe ->
à toi de faire un en sorte que B contacte S pour que S dise à A qu'il va recevoir un appel et donc qu'il doit ouvrir un socket (WSKc) en écoute, etc.. (puisque S est toujours connecté avec tout le monde)
là, A doit répondre quand il est prêt, à S, avec le port dispo.
S doit renvoie à B.
B reçoit donc (exemple) "OK_CALL192.168.0.50:999"
et là, il contacte A qui est serveur.
"999" sort pas de nulle part, c'est toi qui a prédéfini des ports, en accord avec l'admin, pour qu'ils soient redirigés par le(s) routeur(s)
et là, çà s'arrête là. les routeurs sont OK, la relation Client/Serveur aussi, et c'est bon.

plus simple ->
chaque client est aussi serveur. l'application serveur (S), le principe WSK(0) (1) ..., les clients ont la même chose.
quand le client (A) se loggue sur S, il envoie de suite son IP et port et se met en écoute.
quand B va se logguer, il va recevoir tout çà, et pourra donc directement contacter A (et vice versa, puisque B client ET serveur)

espérant que tu y vois encore plus clair ;)

ps : pas de souci pour clôturer, c'est pour aider, pas une course aux points...
PCPT
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 sept. 2005 à 04:16
LAN = Local Area NetWork (réseau local)WAN Wide ..... (réseau étendu Lan + Internet + optionnel Lan)

mon exemple, début du dernier post "(je parle uniquement de Lan, pas de Wan)"
cela dit, je comprend ta question et elle est valable aussi en LAN.

je n'ai peut-être pas assez expliqué ou insisté :
B joint S
B est un client (et serveur par la suite, solution 2) sur un sous réseau
S est LE serveur (puisqu'indispensable au logg) sur un sous-réseau, identique ou non à celui de B.
pour le cas, on va dire différent (pour coller à nos exemples)

B est en 10.0.0.240
il veut joindre S en 192.168.0.10 sur le port FIXE défini 6543

(jusque là, je radote)
tu prends l'exemple de 127.0.0.1 avec 192.168.0.5 (par exemple)
mais ce n'est pas valable. 127.0.0.1 est l'adresse locale de toute carte réseau. la joindre revient à te joindre, donc pas de routeur, donc pas de test.
(çà, c'était une apparté)

donc le truc, c'est que sur un même sous réseau, si 192.168.0.66 (?) veux parler à n'importe qui, il va tout de même passer par le routeur, qui va lui dire "nan reste, bouge pas t'es tout bon"

et là, c'est pareil
B (10.0.0.240) va essayer d'appeler S (192.168.0.10:6543) et c'est le routeur, CONFIGURé, qui va directement voir dans sa table....

tes paquets font donc 10.0.0.240 ->> 10.0.0.0 (routeur 1) ->> 192.168.0.0 (routeur 2) ->> 192.168.0.10
transparent pour l'utilisateur. sa carte est configurée pour joindre le routeur, qui lui, sait quoi faire...

bonne nuit
(dsl pour les fautes, je m'applique d'habitude, mais là ... )
PCPT
3

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

Posez votre question
fredy103 Messages postés 10 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 2 septembre 2005
2 sept. 2005 à 00:56
Merci tout d' abord pour ta réponse mais en fait c'est pas tout à fait clair, tu pouras m'éclaircir d'avantage et me schématiser un peu tous ça si c'est possible? Le rôle du winsock dans tout ça...
Merci d'avance.
0
fredy103 Messages postés 10 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 2 septembre 2005
2 sept. 2005 à 02:17
Grand merci pour ton tuto cela veut dire que les choses commencent à devenir plus claires, c'est vrai que je débute mais je cherche pas à faire un chat tout simple histoire d'un type A qui contacte son voisin B qui est devant lui et tous les deux sous un même routeur, plutôt j'aimerai aller un peu au delàs de ça c'est à dire faire de façon que les deuxn, A et B, appariennent à deux routeurs differents. Voilà j'espère que c'est plus claire ma question aussi, j'aimerai savoir si c'est faisable avec winsck et comment?
Grand merci encore.
P.S: désolé de pas faire accèpter tes réponses, j'aimerai avoir le plus des réponses possibles ;-)
0
fredy103 Messages postés 10 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 2 septembre 2005
2 sept. 2005 à 03:49
C'est vraiment super de trouver des gens aussi sympas et prêts pour l'aide!! Chapeau Mr PCPT!
C'est tout à fait clair maintenant, je tend vers la dieuxième solution. Mais y a encore quelque chose qui va pas pour moi à ce niveau là:
"... B (IP ci-dessus 'càd: 10.0.0.240') contacte S (192.168.0.10:6543)...."
Je me demande bien quelle adresse ip (de S) va le winsock de B utiliser pour se connecter à S? J'ai fait des testes avec un chat entre 2 quand tout est en local 127.0.0.1 et 192.168.... ça marche très bien mais quand c'est de l'exterieur càd depuis un autre poste qui n'appartient pas au même reseau que S j'utilise normalement l'ip externe et là c'est le problème! Ca marche pas!! La connexion avec S ne s'établit pas!! C'est ce qui me rend fou. Tu peux me dire pourquoi? Qu'est ce qui va pas, sachons que S est derière un routeur, est ce c'est ça la cause? Si oui alors que faire? Sinon, quoi faire aussi ? (Désolé j'abuse trop, mais ça n'arrive toujours comme ça de trouver une personne comme toi )
P.S: j'apprécis bcp ça de ta part "ps : pas de souci pour clôturer, c'est pour aider, pas une course aux points..."
c'est temps d'aller dormir a+ Merci
0
fredy103 Messages postés 10 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 2 septembre 2005
2 sept. 2005 à 15:35
re,
Cette fois mon remerciement sera d'accèpter toutes tes réponses, eh bien tu mérites toutes les points.
Grand merci une fois de plus de se donner la peine pour donner ces explications.
Je vais maintenant relire depuisle début pour méditer un peu plus et essayer de comprendre à ma manière ; )
Allez à la prochaine question
++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 sept. 2005 à 17:31
ravi d'avoir pu t'aider
bonne continuation, @ la prochaine
PCPT
0
Rejoignez-nous