IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Connection Serveur Client


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 62
    Points : 56
    Points
    56
    Par défaut Connection Serveur Client
    Voici mon programme Serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Int32 PortTCP=13000; //TCPListener ecoute le port 13000
    IPAddress* LocalAddress = IPAddress::Parse(S"127.0.0.1");
     
    //On créé le server
    TcpListener* ServerTCP = new TcpListener(LocalAddress,PortTCP);
     
    ServerTCP->Start(); // On demarre le server
     
    //Buffer de reception
    Byte MessageBytes[] = new Byte[256];
    String* MessageString = 0;
     
    while(true) // le server boucle a l'infini
    {
    	Console::Write(S"Attente de connection...");
     
    	//AcceptTcpClient est un appel bloquant
    	//On attend une requete client
    	TcpClient* ClientTCP = ServerTCP->AcceptTcpClient();
    	Console::WriteLine(S"\nConnection Etablie!");
     
    	MessageString = 0 ;
    	//Stream utilisé pour lire et ecrire sur la connection
    	NetworkStream* StreamClient = ClientTCP->GetStream();
    	Int32 NbBytes;
     
    	//On boucle pour recevoir les données du Client.
    	while(NbBytes = StreamClient->Read(MessageBytes,0,MessageBytes->Length))
    	{
    		//Conversion Bytes[] § String*
    		MessageString = Text::Encoding::ASCII->GetString(MessageBytes,0,NbBytes);
    		Console::WriteLine(String::Format(S"Données recues : {0}",MessageString));
     
    		//On traite les données du client
    		MessageString = MessageString->ToUpper();
    		MessageString = MessageString->Insert(0,new String("[Server]MessageRecu:"));
     
    		Byte ReponseByte[] = Text::Encoding::ASCII->GetBytes(MessageString);
    	}
    	//On ferme la connection
    	ClientTCP->Close();
    }
    Voici mon programme Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    String* MessageString = new String("Message du client") ;	
    String* AdresseServer = new String(S"192.168.0.2");	//IP du destinataire
     
    //Création du client. Même adresse, Même port que le serveur
    Int32 PortTCP = 13000;
    TcpClient* ClientTCP = new TcpClient(AdresseServer, PortTCP);
     
    //Convertion String*/Bytes[]
    Byte MessageByte[] = Text::Encoding::ASCII->GetBytes(MessageString);
     
    //Stream utilisé pour lire et ecrire sur la connection
    NetworkStream* StreamClient = ClientTCP->GetStream();
     
    //On envoi le message au serveur TCP connecté
    StreamClient->Write(MessageByte , 0 , MessageByte->Length);
     
    Console::WriteLine(S"Envoyé : {0}", MessageString);
     
    //On recoit la réponse du serveur
    String* ReponseString = String::Empty;
    Byte ReponseBytes[] = new Byte[256];
     
    Int32 NbBytes = StreamClient->Read(ReponseBytes , 0 , ReponseBytes->Length) ;
    ReponseString = Text::Encoding::ASCII->GetString(ReponseBytes , 0 , NbBytes);
    Console::WriteLine(S"Recu : {0}", ReponseString) ;
     
    //On ferme la connection
    ClientTCP->Close() ;
    Lorsque je fait fonctionner le programme en local comme indiquer ci-dessus, ca fonctionne il y a bien communication. Lorsque j'essai de changer l'adresse IP en paramettre de TcpClient...() sur le client ca ne fonctionne plus. J'ai bien verifier l'acces au 2 pc ping et net view, ca communique. Comment faire pour etablir cette liaison ?
    D'avance merci. Damien[/code]

  2. #2
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Tu as un firewall d'installé ? si oui pense a ouvrir les ports
    J'aime pas les épinards... Mais alors pas du tout

  3. #3
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 62
    Points : 56
    Points
    56
    Par défaut
    Oui effectivement j'ai bien un firewall, mais je l'ai désactivé des deux cotés. Le problème ne viens donc pas de là.
    Quelqu'un a t'il une solution ? Une erreur dans mon code peut être ?
    D'avance merci.
    Damien

  4. #4
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Je ne connait pas lles classes que tu utilise pour te connecter... Tu utilise quel librairie ?

    Y a t'il un moyen de savoir si la connexion est effectuée... histoire de savoir si c'est seulement le transfert de donnée qui merdouille ou pas
    J'aime pas les épinards... Mais alors pas du tout

  5. #5
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 62
    Points : 56
    Points
    56
    Par défaut
    J'utilise tout simplement comme librairie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    using System
    using System.Net.Sockets;
    Je pense que c'est un formatage de l'écriture qui ne comprend pas.
    Le compilateur passe, mais une exception est généré sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TcpClient* ClientTCP = new TcpClient(AdresseServer, PortTCP);
    Pourtant la fonction TcpClient(...) prend bien en paramètres un string et un int. Ce qui est etrange c'est que lorsque je fait fonctionner mes deux programmes sur le même PC en placant en paramètres sur AdresseServeur la valeur "127.0.0.1" ou "localhost" et sur PortTCP la valeur 13000 ca fonctionne bien. Aidez moi svp.
    D'avance merci Damien

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Ah ben fallait le dire de suite que tu te payait une exception. Elle dit quoi cette exception (ErrorCode, Message, ...) ?
    http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemNetSocketsSocketExceptionClassTopic.asp
    Une exception c'est runtime hein, c'est pas lié à la compilation.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 62
    Points : 56
    Points
    56
    Par défaut
    Il m'affiche comme exception qu'il n'est aps parvenu a se connecter à l'ordinateur distant au dela du temps aparti.
    D'avance merci Damien

  8. #8
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Si il n'arrive pas a se connecter c'est que :
    - Soit il y a un firewall (aparemment non)
    - Soit Tes 2 PC ne sont pas sur la meme plage IP (aparemment non vérifié avec le ping
    - Soit tu entre la mauvaise IP / Port dans ton code (pourquoi pas)

    Moi je serais toi j activerais mon firewall sur le PC serveur Histoire de voir si il voit un PC qui tente de se connecter via le port que tu as définit...

    En tout cas ce n'est pas du tout un probleme de formatage d'écriture.
    J'aime pas les épinards... Mais alors pas du tout

  9. #9
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Int32 PortTCP=13000; //TCPListener ecoute le port 13000
    IPAddress* LocalAddress = IPAddress::Parse(S"127.0.0.1");
     
    //On créé le server
    TcpListener* ServerTCP = new TcpListener(LocalAddress,PortTCP);
    Pourquoi le listener a besoin de l'IP local du server pour fonctionné ? ton probleme ne viendrais pas de la ?
    J'aime pas les épinards... Mais alors pas du tout

  10. #10
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    Activer l'ecoute sur l'IP externe du serveur, une du genre "192.168.0.2"... et se connecter dessus....

  11. #11
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 62
    Points : 56
    Points
    56
    Par défaut
    Activer l'ecoute sur l'IP externe du serveur, une du genre "192.168.0.2"... et se connecter dessus....
    Je ne comprend pas se que tu veux dire ?
    Peux tu me donner plus de detail ?
    D'avance merci Damien.

  12. #12
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    L'ip 127.0.0.1 c'est une sorte de pseudo carte réseau que l'on apelle un loopback... elle ne sert a rien du tout a part gérer tout ce qui est en local grosso modo.

    Peut etre qu'en mettant 192.168.0.1 (j'imagine que c'est l'IP de ton serveur) peut etre que ca activera l'ecoute sur ta carte réseau et non sur le loopback...

    Enfin c'est ce que j ai compris
    J'aime pas les épinards... Mais alors pas du tout

  13. #13
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 62
    Points : 56
    Points
    56
    Par défaut
    Oui effectivement j'y ai pensé, mais dans la mesure ou c'est le client qui se connect sur le serveur, pourquoi le serveur devrai avoir l'adresse IP du client ? Enfin je vais essayé, mais l'exception arrive directement sans aucun délai d'attente.
    Merci de votre aide, n'hesitez pas si vous avez d'autres idées.
    Damien

  14. #14
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    En fait je ne voulais pas dire que le serveur devait avoir l'IP du client... je voulais dire que tu devais paut etre entrer l'IP du serveur sous forme de 192.168.0.xxx au lieu du 127.0.0.1 (réservé pour le local) ... mais je peux me gourer
    J'aime pas les épinards... Mais alors pas du tout

  15. #15
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    Il faut donner l'IP de la carte reseau qui ecoute sur le Serveur. Par defaut, certainement, il ecoute en local (127.0.0.1) or meme si tu n'as aucune carte reso cette adresse existe.

    Bon donc quand tu crees ta socket sur le serveur, specifies lui l'adresse IP de ce dernier. C'est pas sorcier !

  16. #16
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 62
    Points : 56
    Points
    56
    Par défaut
    Il faut donner l'IP de la carte reseau qui ecoute sur le Serveur. Par defaut, certainement, il ecoute en local (127.0.0.1) or meme si tu n'as aucune carte reso cette adresse existe.
    Tu parles de modifier l'adresse sur le programe partie serveur ou client ?
    On est d'accord que le serveur ne doit pas avoir l'adresse du client pour fonctionner ?
    De plus c'est le client qui génere une exception.
    D'avance merci.
    Damien

  17. #17
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    Oui mais le serveur doit connaitre sa propre IP.

    Donc tu dois certainement specifier à l'initialisation de la Socket, l'IP sur laquelle l'ecoute doit se faire.

    Pour ce qui est de l'exception du client, ca doit etre un TIMEOUT....
    Tout simplement parcequ'il n'arrive pas à se connecter au serveur , non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/04/2010, 16h43
  2. Connection failure client vers serveur!
    Par Akira dans le forum Glassfish et Payara
    Réponses: 0
    Dernier message: 28/07/2009, 16h32
  3. [FreeBSD] Problème connection serveur-client
    Par mout551 dans le forum BSD
    Réponses: 8
    Dernier message: 06/08/2007, 17h21
  4. probleme de connection serveur C client java
    Par ricardvince dans le forum Réseau
    Réponses: 4
    Dernier message: 03/11/2006, 19h45
  5. probleme de connection serveur C client java
    Par ricardvince dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 03/11/2006, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo