[C#] [TCPClient] Connexion à distance [Résolu]

Signaler
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Bonjour,
J'utilise les sockets pour me connecter à un serveur.

Dans le client j'utilise la ligne

clientsocket = new TcpClient("11.11.11.11", port);   (11.11.11.11 est en fait mon adresse IP publique)

Pourtant je n'arrive pas à créer de connection avec mon host (qui est bien en écoute sur le port)

Si je remplace cette adresse par le localhost 127.0.0.1, ca fonctionne parfaitement.

Si je remplace cette adresse par  mon IP locale (192.168.0.2), j'obtiens une erreur comme quoi la connection à été expressement refusée...

Le client et le serveur tournent sur la même machine, le problème survient aussi sur deux machines séparées.

Auriez vous une idée de ce qui ne va pas ?

Merci
A voir également:

13 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
51
Ce n'est pas ton IP publique qu'il faut mettre, mais l'IP de ton ordi sur ton reseau local (et donc tu peux tout a fait la mettre sur le forum, on pourra rien en faire de celle la)


Si ton serveur a une addresse privée de classe C (192.168.x.x), alors c'est celle la qu'il faut mettre.


Ensuite, pour ton connecter au serveur :
-Depuis ton reseau local, tu peux soit dire a ton client de se connecter a cette adresse privée de classe C (et cela ne necessite aucune configuration au niveau du routeur), ou alors depuis ton IP connectée (celle de ton routeur), et la il suffit juste de router le port vers ton serveur.
-Et pour se connecter depuis le net, il n'y a que la seconde option qui marche (logique)





Mx
MVP C#
 
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Salut,

As tu vérifier que le serveur écoute les connexions sur les autres interfaces et pas uniquement le localhost ?
Le firewall ?

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Lorsque je fais un netstat, je vois bien le port en listening.
Je sais que j'utilisais le remoting sur ce port.
Je dis bien j'utilisais car j'ai changé de port pour pouvoir l'utiliser pour les sockets.
Donc en principe ce port est ouvert sur le routeur et le firewall?

Comment verifier?
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

"As tu vérifier que le serveur écoute les connexions sur les autres interfaces et pas uniquement le localhost ?"

Comment verifier ça?? Je n'ai qu'une seule carte reseau branchée sur mon routeur. Il n'y a qu'une interface non? (mes notions de reseau sont quasi nulles alors desolé :p)
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
51
A premiere vue j'aurais dit de regarder si le port était bien routé, mais apparement c'est le cas.
Tu es sur que le serveur est bien démarré ? (genre une exception que tu catch mais que tu loggerais pas, ...)

Tu appelles bien les méthodes Start() et AcceptSocket() de ton TCPListener ?

Mx
MVP C# 
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Lorsque mon client est configuré en local ca fonctionne bien, donc le serveur est bien demarré.
Au fait, je demarre mon serveur en 127.0.0.1, est-ce correct?

Sinon pour Start() et AcceptSocket() c'est bon (ils sont bien dans mon code).


 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
51
Ah bah non, ce n'est pas correct
Il faut demarrer ton serveur avec ton ip locale (celle derriere le routeur)

Mx
MVP C# 
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

En utilisant cette adresse, j'obtiens l'erreur suivante sur le serveur :

"L'adresse demandée n'est pas valide dans son contexte"

J'utilise :

IPEndPoint ipServerEndPoint = new IPEndPoint(IPAddress.Parse("11.11.11.11"), port);
  
socket_ecoute = new TcpListener(ipServerEndPoint);

socket_ecoute.Start();

L'erreur survient sur le Start()
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
51
Normalement, c'est parce que tu mets pas la bonne adresse.  C'est reellement l'adresse de ton interface reseau ?
11.11.11.11, c'est une adresse connectée, pas une adresse privée, si je me trompe pas.
Ton serveur est derriere un routeur, ou est connecté directement au net ?

Mx
MVP C# 
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Je met 11.11.11.11 parce que je ne veux pas balancer mon IP publique comme ça sur le forum :D

Avec mon adresse publique, j'arrive à faire fonctionner le .net remoting donc je pense qu'elle devrait fonctionner aussi pour les sockets non?

Mon serveur est derrière un routeur et le port est bien ouvert.
La j'avoue que je bloque ...
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Bien joué!
J'ai mis 192.168.0.2 sur mon routeur et maintenant je m'y connecte avec mon client via le net
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Pas sur mon routeur, sur mon serveur :)
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
51
Et voila :)
Bonne continuation

Mx
MVP C#