Partage
  • Partager sur Facebook
  • Partager sur Twitter

TCP

Sujet résolu
11 décembre 2015 à 21:08:18

Bonjour,

j'étais en train d'apprendre (en C#) la communication réseau (avec TCP), et je me heurte à un petit problème. En effet, lorsque j'ouvre le serveur et le client sur le même ordinateur, le client arrive à se connecter au serveur sans problème (j'ai testé avec l'adresse IP "127.0.0.1" et mon IP réelle, récupérée par la méthode suivante :

        static string GetIP()
        {
            string strHostName = "";
            strHostName = Dns.GetHostName();

            IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);

            IPAddress[] addr = ipEntry.AddressList;

            return addr[addr.Length - 1].ToString();

        }

, trouvée sur internet).

Ensuite, j'ai décidé d'ouvrir le client sur un autre ordinateur (toujours chez moi) (ainsi cette fois j'ai utilisé la méthode citée plus haut pour récupérer l'adresse IP, je n'ai pas utilisé l'adresse "127.0.0.1"), or le client ne parvient pas à se connecter (j'ai une erreur du style "La connexion n'a pas pu s'établir car l'hôte distant l'a expressément refusé" ou quelque-chose comme ça). Je ne sais donc pas comment faire pour que la connexion puisse s'effectuer. Faut-il ouvrir des ports ou faire une autre manip' ?

Merci d'avance :)


  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2015 à 21:54:15

Si c'est sur le même réseau il faut utilisé l'adresse locale (ex: 192.168.1.15) de ton serveur
  • Partager sur Facebook
  • Partager sur Twitter

Il y a 10 catégories de personnes : celles qui savent compter en binaire et celles qui ne savent pas.

12 décembre 2015 à 8:47:22

C'est ce que j'ai fait. En effet, la méthode GetIP() indiquée dans mon premier message retourne "192.168.1.128". J'ai donc instancié mon IPEndPoint de cette manière :

static IPEndPoint iep = new IPEndPoint(IPAddress.Parse(GetIP()), 8080);

qui revient à écrire

static IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.128"), 8080);



  • Partager sur Facebook
  • Partager sur Twitter
12 décembre 2015 à 12:06:37

Regarde du côté du firewall serveur si le port 8080 est bien ouvert en TCP, et sur la box/routeur aussi (je dirais que la box ne devrait pas bloqué vu que c'est dans le même réseau, mais je suis pas spécialiste alors on sait jamais)
  • Partager sur Facebook
  • Partager sur Twitter

Il y a 10 catégories de personnes : celles qui savent compter en binaire et celles qui ne savent pas.

12 décembre 2015 à 12:37:40

J'ai testé avec d'autres ports et j'en suis venu à utiliser le port 1234 (ce nombre me passait par la tête) (évidemment ça ne fonctionnait toujours pas). J'ai ouvert, sur le PC où l'application serveur est ouverte, le port 1234 mais ça ne fonctionne toujours pas (j'ai fait de même sur la box).

Par contre, j'ai remarqué une chose assez étrange. Quand j'utilise le port 80, le client arrive à se connecter (il m'affiche un petit "Done !" que j'ai ajouté après le clientSocket.Connect(IEP)), par contre quand je regarde sur mon serveur, il n'a détecté aucun client (il est censé m'afficher "Client detected !" puis remettre le message "Waiting for client...", or il n'affiche rien...).

  • Partager sur Facebook
  • Partager sur Twitter
12 décembre 2015 à 12:56:31

Heu alors là je peux pas t'aider, C# je connais pas

Met le code serveur quand tu fais le listen/accept et le code client quand tu fais le connect stp

  • Partager sur Facebook
  • Partager sur Twitter

Il y a 10 catégories de personnes : celles qui savent compter en binaire et celles qui ne savent pas.

12 décembre 2015 à 13:42:36

Serveur :

static int port = 1234;
        static void Main(string[] args)
        {
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint iep = new IPEndPoint(IPAddress.Any, port);
            serverSocket.Bind(iep);
            serverSocket.Listen(1);
            Console.WriteLine("Server initialized");
            while (true)
            {
                Console.WriteLine("Waiting for client...");
                Socket sendSocket = serverSocket.Accept();
                Console.WriteLine("Client detected !");
            }
        }

Client :

static Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        static IPEndPoint iep = new IPEndPoint(IPAddress.Parse(GetIP()), 1234);
        static void Main(string[] args)
        {
            try
            {
                clientSocket.Connect(iep);
                Console.WriteLine("Done !");
                Console.Read();
            }
            catch(Exception e)
            {
                Console.WriteLine("Error while trying to connect to server : " + e.Message);
                Console.Read();
            }
        }

        static string GetIP()
        {
            string strHostName = "";
            strHostName = Dns.GetHostName();

            IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);

            IPAddress[] addr = ipEntry.AddressList;

            return addr[addr.Length - 1].ToString();

        }



  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2015 à 17:51:54

Dans les paramètres avancés du firewall, dans la catégorie "Règles de trafic entrant" j'ai ajouté une règle pour le port 1234 :

J'ai même désactivé tous les firewall un moment (je parle bien de l'ordinateur où se trouve le serveur), mais rien n'y fait..

  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2015 à 13:52:17

C'est pas parce que ton port 1234 est réservé au système ? http://www.frameip.com/liste-des-ports-tcp-udp/ 

Sinon je n'ai aucune idée.

  • Partager sur Facebook
  • Partager sur Twitter
Ilidas-Gaming - Site e-commerce de vente de Clé CD - Recherche responsable marketing
15 décembre 2015 à 17:10:09

Aucun problème !

(j'ai mis un petit trait rouge devant la ligne correspondant à mon serveur)

  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2015 à 17:10:53

Tchoune a écrit:

C'est pas parce que ton port 1234 est réservé au système ? http://www.frameip.com/liste-des-ports-tcp-udp/ 

Sinon je n'ai aucune idée.


Dans la liste que tu m'as donné il n'est pas marqué en "Reserved" donc je ne pense pas ^^
  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2015 à 17:37:14

Ok, ton serveur semble bien en écoute.

Sinon, je ne vois pas dans ton programme client où tu indiques l'adresse IP à laquelle tu te connectes ?

  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2015 à 20:21:32

Szman a écrit:

C'est ce que j'ai fait. En effet, la méthode GetIP() indiquée dans mon premier message retourne "192.168.1.128". J'ai donc instancié mon IPEndPoint de cette manière :

static IPEndPoint iep = new IPEndPoint(IPAddress.Parse(GetIP()), 8080);

qui revient à écrire

static IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.128"), 8080);



Comme expliqué plus haut, dans l'instanciation de mon IPEndPoint, dans le paramètre correspondant à l'adresse IP, j'ai remplacé

IPAddress.Parse("129.168.1.128")

par

IPAddress.Parse(GetIP())

(sachant que la méthode GetIP() me retourne mon adresse IP (ici "129.168.1.128")). Par ailleurs, je ne pense pas que le problème vienne de là, sachant que lorsque je lance le client sur l'ordinateur où j'ai précédemment lancé le serveur, celui-ci arrive à se connecter au serveur. Le problème intervient lorsque je lance le client sur un autre ordinateur que celui où est ouvert le serveur.


  • Partager sur Facebook
  • Partager sur Twitter
16 décembre 2015 à 11:26:32

Je pense aussi que c'est ça, ta fonction GetIP récupère l'adresse locale avec cette fonction : Dns.GetHostName()

A la place il faudrait mettre le hostname de ton serveur (ou plus simple, tu vires cette fonction qui ne sert pas à grand chose ici, tu crées une variable avec ton IP serveur dedans et basta)

  • Partager sur Facebook
  • Partager sur Twitter
System test engineer
16 décembre 2015 à 21:01:41

En fait je suis juste allé chercher cette fonction sur internet, ne sachant pas comment récupérer mon adresse IP. Du coup, où puis-je trouver l'IP du serveur ?
  • Partager sur Facebook
  • Partager sur Twitter
17 décembre 2015 à 7:28:30

Si tu restes sous le même réseau. Un simple ipconfig (sur la machine serveur) pour trouver ton ip à la ligne : Adresse Ipv4 et ensuite l'inscrire en claire dans ton code pour te connecter à la machine serveur.
  • Partager sur Facebook
  • Partager sur Twitter
Ilidas-Gaming - Site e-commerce de vente de Clé CD - Recherche responsable marketing
17 décembre 2015 à 16:45:35

Ca marche ! Merci beaucoup pour votre précieuse aide ! :D
  • Partager sur Facebook
  • Partager sur Twitter
17 décembre 2015 à 19:21:00

bonsoir a tous,  j'ai une confusion  le modelé tcp/ip a combien de couche, 4 ou 5? merci d'avance
  • Partager sur Facebook
  • Partager sur Twitter
Change est risque mais ne pas change conserve ses mauvaises habitudes est encore plus risque.
18 décembre 2015 à 10:24:39

princeramos a écrit:

bonsoir a tous,  j'ai une confusion  le modelé tcp/ip a combien de couche, 4 ou 5? merci d'avance


Merci de faire une recherche avant de poster (en l’occurrence dans un sujet qui n'a pas de rapport) :

http://lmgtfy.com/?q=Mod%C3%A8le+TCP%2FIP&l=1

https://openclassrooms.com/forum/sujet/difference-fondamentale-entre-modele-osi-et-tcp-ip

  • Partager sur Facebook
  • Partager sur Twitter
System test engineer