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 :

[C#] Comment implémenter la connexion Client/Serveur ?


Sujet :

C#

  1. #1
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut [C#] Comment implémenter la connexion Client/Serveur ?
    Bonjour à Tous,

    Voilà j'ai ce code, qui il me semble créer un serveur local, dans mon cas ouvre le port 11000, ce code a l'air de fonctionner :

    string message = "Salut et bienvenue sur le serveurr!";

    try
    {
    Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    serverSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000));

    serverSocket.Listen(1);

    Socket clientSocket;
    byte[] buffer = new byte[1024];
    int count;

    while ((clientSocket = serverSocket.Accept()) != null)
    {

    count = clientSocket.Receive(buffer, 0, 1024, SocketFlags.None);
    Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, count));

    clientSocket.Send(Encoding.ASCII.GetBytes(message), 0, message.Length, SocketFlags.None);
    clientSocket.Close();
    }

    }
    catch (Exception e)
    {
    Console.Error.WriteLine(e.Message);
    }

    Console.In.ReadLine();
    Mais J'aimerai bien maintenant pouvoir créer le client et que quand je me connecte au serveur(depuis le client) je puisse voir apparaitre le message "Salut et Bienvenue..." sur l'application client.

    Mais l'application client est celle qui me pose problème, j'ai fait ça :

    System.Net.Sockets.TcpClient tcpclient = null;

    tcpclient = new System.Net.Sockets.TcpClient("127.0.0.1", 11000);

    Console.In.ReadLine();
    Qui n'a pas l'air de fonctionner

    Je fais les tests des serveurs et clients sur le même PC.

    Merci pour toute aides.

    J'aimerai réaliser un petit messenger pour un réseau local en C# mais pour l'instant il faut que j'arrive à faire des applications Client/Serveur.

    Merci

  2. #2
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Alors j'ai fait mon client comme ceci :

    try
    {

    Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    clientSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

    clientSocket.Connect(new IPEndPoint(Dns.GetHostByName("127.0.0.1").AddressList[0], 11000));

    clientSocket.Close();

    }
    catch (Exception e)
    {
    Console.Error.WriteLine(e.Message);
    }


    Console.In.ReadLine();
    La connexion a l'air de passer mais sur le programme client, je ne vois pas la phrase de bienvenue du serveur

    Merci

  3. #3
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Pour verifier que la connexion passe bien avec le serveur(premier post ),
    j'ai fait ça comme CLient :


    System.Net.Sockets.TcpClient tcpclient = null;

    try
    {
    tcpclient = new TcpClient("127.0.0.1", 11000);
    Console.Out.WriteLine("Connect Reussi !");

    }
    catch
    {
    Console.Out.WriteLine("Pas reussi ");
    }
    finally
    {
    if (tcpclient != null)
    {
    tcpclient.Close();
    }
    }
    Et il m'affiche "Connect Reussi !", c'est que ça passe bien

    Mais comment arriver à voir le message de bienvenue du serveur sur l'application cliente ?

    Merci

  4. #4
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Bonjour,

    Beau monologue
    Pour recevoir les données du serveur, il faut que tu inities une lecture coté client (fonction Receive)
    Il y a tout ce qu'il faut sur la page cours pour les sockets (cherche réseau)
    Notemment cette introduction http://dotnet.developpez.com/tutoriels/reseau/

    http://dotnet.developpez.com/cours/

  5. #5
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Merci je vais me mettre à la lecture

    Alors en fait je viens de redescendre d'un cran là

    J'ai dit que ça fonctionné les deux sur la même machine.

    Alors j'ai mis le programme serveur sur un ordi de mon réseau(192.168.1.186)
    puis le programme client sur mon ordi, j'ai désactivé tous les parefeux.

    Mais le client n'arrive pas à se connecter alors qu'il réussissait avec les deux programmes sur la même machine

    J'ai donc là :

    Sur le PC Client le programme :

    System.Net.Sockets.TcpClient tcpclient = null;

    try
    {
    tcpclient = new TcpClient("192.168.1.186", 11000);
    Console.Out.WriteLine("Connect Reussi !");

    }
    catch
    {
    Console.Out.WriteLine("Pas reussi ");
    }
    finally
    {
    if (tcpclient != null)
    {
    tcpclient.Close();
    }
    }
    Et sur le PC Serveur le programme :

    string message = "Salut et bienvenue sur le serveurr!";

    try
    {
    Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    serverSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000));

    serverSocket.Listen(1);

    Socket clientSocket;
    byte[] buffer = new byte[1024];
    int count;

    while ((clientSocket = serverSocket.Accept()) != null)
    {

    count = clientSocket.Receive(buffer, 0, 1024, SocketFlags.None);
    Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, count));

    clientSocket.Send(Encoding.ASCII.GetBytes(message), 0, message.Length, SocketFlags.None);
    clientSocket.Close();
    }

    }
    catch (Exception e)
    {
    Console.Error.WriteLine(e.Message);
    }

    Console.In.ReadLine();
    Pourquoi la connexion ne s'etablit plus ?

    Merci

  6. #6
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    En fait j'ai pas l'impression que le serveur ouvre bien le port 11000 et le met en écoute

    J'ai passé un logiciel de scan de ports et il ne trouve pas le port 11000 d'ouvert sur le serveur, c'est que mon programme serveur de doit pas être au top, peut-être c'est pas 127.0.0.1 qu'il faut mettre ?

    Merci

  7. #7
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Ca Marche !

    C'était le serveur qui était pas du Top

    Mais j'ai fais un mix de plusieurs code et ça marche

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;

    namespace Serveur
    {
    class Program
    {
    static void Main(string[] args)
    {

    IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());

    IPAddress ipAddress = ipHostEntry.AddressList[0];

    Console.WriteLine("IP=" + ipAddress.ToString());

    Socket CurrentClient = null;


    try
    {
    Socket ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


    ServerSocket.Bind(new IPEndPoint(ipAddress, 666));

    ServerSocket.Listen(10);


    }



    catch (Exception e)
    {
    Console.Error.WriteLine(e.Message);
    }

    Console.In.ReadLine();

    }
    }
    }
    Merci à Toi abelman

    Maintenant que j'ai reussi à faire connecter l'un à l'autre, faut que j'essayes de les faires communiquer...

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    primo arrete de poster 15 messages à la suite c'est illisible pour ceux qui souhaiterais t'aider !

    Ensuite, il te faut sérieusement un ptit cours sur TCP/IP avant de te lancer dans le developpement d'applications CLIENT SERVEUR, à commencer sur les domaines d'utilisations des IP...

    127.0.0.1 : Ip de loopback => ACCESSIBLE UNIQUEMENT DEPUIS LA MACHINE EN QUESTION, on l'utilise beaucoup pour tester ses applis.

    Dans ton cas, sur le serveur tu dois mettre l'ip du serveur, celle à laquelle le client essaye de le contacter. Logique si tu ouvre un port sur l'ip 127.0.0.1, il est NORMAL ET LOGIQUE qu'il ne soit pas ouvert sur l'ip 192.168.1.186.

    Quand au mix que tu as fait il est logique qu'il fonctionne car tu ne défini pas explicitement l'ip à "écouter", tu laisse le système déduire de par lui même laquelle écouter. Ce système est bien, de prime abord mais pose quelques soucis, lorsque tu est sur une machine avec plusieurs interfaces réseaux et donc plusieurs IP, et encore plus de problemes si tes interfaces réseaux ont plusieurs IP associées (sous linux par exemple où attribué plusieurs ip a une meme interface est enfantin)
    En effet, dans ce cas il prend la premiere IP qui lui passe sous la main, et pas forcément celle que tu souhaite

    Donc voila quand tu fait de la programmation Client/Serveur, avant même de poser des questions de ce genre, vérifie que les IP sont bien définies. car quand tu fait un bind, tu ne peux pas faire un bind sur plusieurs IP avec une seule et unique socket serveur, même sous linux, ou n'importe quel système. Il faut une Socket Serveur par point de Bind ! Donc 127.0.0.1 est forcément différent de 192.168.1.186 !
    Ce que tu peux faire éventuellement c'est listé une a une les ip de la machine serveur et de leur attribué une socket serveur (et un thread au passage, amoins de les configurer en non blocante et de les tester séquentiellement).

    Voila j'espère que ca répond à ta question.

  9. #9
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Merci mais je travaille pas chez Microsoft

    J'apprends sur le Tas et Merci de m'avoir apporter ces explications

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

Discussions similaires

  1. connexion client serveur en j2me
    Par unidach dans le forum Java ME
    Réponses: 2
    Dernier message: 29/06/2007, 18h56
  2. Réponses: 2
    Dernier message: 14/05/2007, 22h35
  3. [Réseau] connexion client/serveur
    Par Creuvard dans le forum Réseau
    Réponses: 31
    Dernier message: 09/01/2007, 12h48
  4. [SOCKET] connexion client serveur avec applet
    Par kaiser2003 dans le forum Applets
    Réponses: 2
    Dernier message: 06/10/2004, 22h32
  5. comment gerer plusieurs connexions client/serveur
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/08/2002, 16h58

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