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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    Par défaut code client serveur
    Bonjour !

    j'ai un souci avec l'architecture client/serveur, le problème se pose au niveau du serveur, j'ai mis le code que vous allez voir par la suite dans un projet console application ben ca marchait très bien mais quand je voulais l'utiliser dans les winform ben ca bloque !!!
    voici le code 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
     
    namespace PCServeur
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
     
                /********** parametres de connexion ***********/
                IPHostEntry iphe = Dns.Resolve("localhost");
                IPEndPoint ipep = new IPEndPoint(iphe.AddressList[0], 1069);
                TcpListener s = new TcpListener(ipep);
                s.Start();
                TcpClient c = s.AcceptTcpClient(); // accepter un client
                label2.Text = "un pc connecté !";
                Stream str = c.GetStream();
                byte[] b = new byte[100];
     
                if (str.Read(b, 0, 50) != -1) //verifier s'il ya quelque chose dans le flux de donnees
                {
                    TextBox1.Text = Encoding.ASCII.GetString(b);
                }
     
                str.Close();
                c.Close();
     
            }
        }
    }
    il se bloque lors de l'exécution au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TcpClient c = s.AcceptTcpClient();
    j'ai essayé ce code dans un projet console application ca marche très bien, mais je crois que ce n'est pas la même chose car en mode console application l'exécution se fait ligne par ligne donc quand il arrive a l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TcpClient c = s.AcceptTcpClient();
    le serveur se met en attente, par contre dans le winform quand il arrive a cette exécution l'ordinateur se bloque !
    comment pour résoudre ce problème ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Bonjour,

    c'est tout à fait normal que ton application se bloque lors de l'appel à AcceptTcpClient car cette méthode est bloquante le teps qu'un client se connecte.
    Pour contourner se problème, tu devrais regarder du coté des opérations asynchrones et de la méthode BeginAcceptSocket.

  3. #3
    Membre éclairé 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
    Par défaut
    salut !

    oui je sais qu'il doit se bloquer pour attendre l'arrivé d'un client, en console ben c'est ce qu'il fait, en suite des qu'un client se connecte il continue.
    mais lorsque je ai mis ce code dans le constructeur de la forme ben il se bloque d'une façon anomale (ce n'est pas un blocage d'attente d'un client) d'ailleurs il ne m'affiche même pas la forme !!!

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Ce qui est normal, vu que tu met ton programme en attente en plein milieu du constructeur du Form

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Regarde du coté des background worker.

    Pour laisser l'interface s'exécuter sans la planter.

  6. #6
    Membre éclairé 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
    Par défaut
    Apparemment je n'arrive pas a très bien comprendre comment utiliser BeginAcceptSocket ni comment ca fonctionne si quelqu'un peut m'expliquer je serai très reconnaissant.

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