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 :

code client serveur


Sujet :

C#

  1. #21
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Points : 140
    Points
    140
    Par défaut
    Pour le serveur, tu dois mettre l'adresse ip du serveur et le port sur lequel tu veux écouter.
    Pour le client, tu crées le TcpClient sans paramètre et tu indique l'adresse du serveur et le port lorsque tu appels la méthode Connect.

  2. #22
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    j'ai essaye de mettre mon application sur deux machines différentes, (le serveur sur une machine et le client sur une autre) pour le serveur j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IPHostEntry iphe = Dns.Resolve("localhost");
    IPEndPoint ipep = new IPEndPoint(iphe.AddressList[0], 1069);
    le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c = new TcpClient("192.168.2.100", 1069); //c'est l'adresse IP de la machine serveur
    bon il m'affiche erreur de connexion, maintenant je ne sais pas comment choisir le numéro port moi je pensais qu'il suffirait qu'il soit le même dans les deux application c'est tout ?

  3. #23
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Points : 140
    Points
    140
    Par défaut
    pour le serveur, le code me parait bon (je suppose que après il y'a le Start et le AcceptTcpClient). Il se peut que ton parfeu te bloque l'accès.

    Pour le client le code devrais plutot être ça (si j'e ne me trompe pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                var c = new TcpClient();
                c.Connect(IPAddress.Parse("192.168.2.100"), 1069);
    Pour le choix des numéros de port, il faut surtout qu'il soit inoccupé et que l'on ai t les droits pour ouvrir une connection dessus (je ne me souviens plus des plages de port).

  4. #24
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    ben ca ne marche toujours pas apparemment la programmation réseau est beaucoup plus compliquée que ce que je croyais !!!

    je crois le problème c'est le numéro de port !
    l'erreur qui a été générée est :
    A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.2.100:1069
    voila mais la je ne comprends pas , pour le numéro de port je prends comme ca un numéro au hasard ?! est ce que le serveur et le client doivent utiliser le même numéro de port ?

  5. #25
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    j'ai réussi a faire communiquer un client et un serveur qui se localisent sur deux machines différentes, mais j'ai tenté la même chose sur l'emulateur mais ca n'a pas marché ??!!

    juste une petit remarque, vu que je veux mettre le client dans le PDA donc je n'ai pas besoin de connaitre son IP parce que je ne vais utiliser que le IP du serveur ?

  6. #26
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 177
    Points : 130
    Points
    130
    Par défaut
    La plage "interdite" est de 1 à 1024. Pour être sûr que le port est pas déjà utilisé tu peux regarder pour les ports actuellement en service et dans le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Windows\System32\drivers\etc\services
    pour les port connu pour héberger un service bien connu (80 =>http...)

    Sinon pour exemple, msdn en fournit
    http://msdn.microsoft.com/en-us/library/fx6588te.aspx pour le serveur
    http://msdn.microsoft.com/en-us/library/bew39x2a.aspx pour le client


    A mon avis le code serveur est pas bon, tu l'obliges à utiliser la première adresse ip (ça se peut que c'est une adresse ipv6 ou une carte de bouclage par exemple et donc ca ne marchera pas). Tu vois avoir un truc du genre IPAddress.Any

  7. #27
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    salut !

    finalement t'as raison Arsenic68 le problème est la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IPHostEntry iphe = Dns.Resolve("localhost");
    IPEndPoint ipep = new IPEndPoint(iphe.AddressList[0], 8081);
     
    MessageBox.Show(iphe.AddressList[0].ToString()); //pour afficher l'adresse IP
    lorsque j'ai essayé d'afficher l'adresse IP, il m'affiche 127.0.0.1 (@de bouclage) comment faire pour récupérer l'adresse IP locale de ma machine attribuée par le DHCP ?

  8. #28
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    apparemment je peux ne pas préciser l'adresse IP du serveur dans le serveur, c'est a dire je mets directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TcpListener s = new TcpListener(8080); //je précise uniquement le numéro de port
    maintenant ce qui me tracasse le plus, c'est fait que des fois ca marche et des fois non surtout lorsque je mets le serveur sur une machine et le client sur une autre ???

    donc j'ai pensé au numéro de port qui est des fois libre et des fois non !? car c'est pas normal dutout que ca marche de fois et des fois non ?!

    j'ai deux questions :
    1- est ce que le serveur et client doivent utiliser le même numéro de port, si non alors comment le serveur pourra communiquer et récupérer l'information vu qu'il écoute sur un autre port ?

    2- comment choisir un numéro de port ?

  9. #29
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 177
    Points : 130
    Points
    130
    Par défaut
    Pourquoi tu veux à tout pris rendre le service que sur cette adresse? Le plus simple c'est de lui dire d'utiliser 0.0.0.0 et ::1 (l'adresse ANY en C). Le port 8080 est un port de contrôle d'apache (mais aussi de contrôle d'Oracle 10g express).

    Le client doit contacter le serveur sur le port bien connu (celui que tu as choisi), mais le port que le client utilisera de son coté sera un port libre au hasard.
    Par exemple, tu rends le service sur le port 1234 de l'adresse 192.168.1.13. Le client utilisera ces paramètres. L'adresse du client est sur une de tes cartes (tu peux spécifier laquelle tu veux utiliser) avec un port libre sur cette carte.

    Le port que tu choisis dépend de ton envie (tu as 63 Ko de possibilités (64-1)) moins les programmes que tu fais tourné (Oracle = 1521, Web = 80, SMTP = 25)

  10. #30
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TcpClient c = new TcpClient ("@IP serveur",5020);
    Seveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TcpListner s= new TcpListener (5000);
    est ce que je peux communiquer comme ca ?
    peux tu m'expliquer stp comment ca se passe entre ces deux ports ?

    Ps: ca n'a pas marché comme ca ! pour que ca marche j'ai du mettre le même numéro dans le TcpListener et le TcpClient ?!

  11. #31
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 177
    Points : 130
    Points
    130
    Par défaut
    Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TcpClient c = new TcpClient ("@IP serveur","portDuServeur");
    Seveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TcpListner s= new TcpListener ("portDuServeur");
    Le client demande un connexion au serveur sur l'adresse du serveur, port du serveur. Pour que le serveur puisse lui répondre (la partie ipSource:portSource), il prend un port libre sur la carte la plus appropriée.

    Le serveur fabrique sa réponse et l'envoie sur l'ex couple source et met son ipSource:portSource en tant que couple Destination afin que le client puisse lui répondre de nouveau
    etc...

    Et si c'est plus simple avec un schéma :

  12. #32
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    merci pour tes explications,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TcpClient c = new TcpClient ("@IP serveur","portDuServeur");
    pour ce port du serveur ? je peux prendre n'importe quelle valeur, au hasard, il faut juste éviter une valeur entre 0 et 1023 ?

    Pour le port du client en au aucun cas je n'en aurai besoin non ? vu que lorsque le client se connecte a un serveur ils vont tous les deux lire et écrire a partir d'un même flux, donc une fois le connexion est établie, un flux est créé entre les deux donc ils vont se communiquer a travers ce flux ? donc en fait je n'aurai besoin que du port du serveur pour établir la connexion entre les deux en suite le tout sera dans le flux ? "je parle du coté programmation" car je sais pour qu'il puisse communiquer il faut connaitre le port utilisé par le client.

  13. #33
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 177
    Points : 130
    Points
    130
    Par défaut
    portDuServeur tu dois utiliser le même que celui que tu as définis coté serveur 12348 dans mon exemple.

    Et oui tu ne tapes pas dans les 1024 premières valeurs (si jamais tu compiles et exécute sur Linux hors mode root il t'enverra sur les roses).

    Et oui aussi niveau programmation, tu n'as pas besoin de savoir quelle est l'adresse et le port du client à moins que tu fasse une filtration.

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/05/2014, 07h03
  2. Améliorer un code client/Serveur avec boost.
    Par Invité dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 29/07/2013, 13h31
  3. Code Client/serveur avec thread sur Android
    Par Narcistou dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 21/04/2011, 11h25
  4. Réponses: 8
    Dernier message: 23/11/2007, 22h59
  5. code source application client serveur
    Par adel84 dans le forum Delphi
    Réponses: 1
    Dernier message: 11/12/2006, 12h01

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