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 :

"TcpListener", bloquage lors de la lecture de mes sockets


Sujet :

C#

  1. #1
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut "TcpListener", bloquage lors de la lecture de mes sockets
    Bonjours Tout le monde.
    bon je débute dans les socket, donc j'ai une application client server qui fait que passer des données.
    bon voici mon code server :

    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
    43
    44
    45
    46
     
    public class _socket
        {
            public StreamReader serverStreamReader, clientStreamReader;
            public StreamWriter serverStreamWriter, clientStreamWriter;
     
            public _socket()
            {
                 startserver();   /// initialisation du server
                 ServerListining();   /// écoute
            }
     
    /////////////////////      SERVER    //////////////////
            public void startserver()
            {
                TcpListener tcpServerListener = new TcpListener(300);
                tcpServerListener.Start();
                MessageBox.Show("server started");
                Socket serverSocket = tcpServerListener.AcceptSocket();
     
                try
                {
                    if (serverSocket.Connected)
                    {
                        MessageBox.Show("client connected");
                        NetworkStream serverSockStream = new NetworkStream(serverSocket);
                        serverStreamWriter = new StreamWriter(serverSockStream);
                        serverStreamReader = new StreamReader(serverSockStream);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.StackTrace);
                }
            }
     
    ////////////////////////////////    listining SERVER     
            public void ServerListining()
            {
                while (true)
                {
                    MessageBox.Show(serverStreamReader.ReadLine());
                    serverStreamWriter.WriteLine("hello from server");
                    serverStreamWriter.Flush();
                }
            }
    dès que je lance mon application ça se bloc et tout les contrôles dessus sont inopérantes, et je pense que c'est la fonction ServerListining() qui fait ce blocage vus que la boucle while tourne sans arrêt pour recevoir mes données, et c'est de même pour le coté Client de mon code.
    Alors comment faire pour laisser ma boucle while tourner sans bloquer mon application ?

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Socket serverSocket = tcpServerListener.AcceptSocket();
    c'est cette ligne qui est bloquante, c'est normal , la le serveur attend qu'un client se connecte, tu dois lancer la méthode dans un thread.

    et quand on est débutant on doit suivre un tutorial non?

    tiens pour commencer Utilisation des sockets en C#

  3. #3
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Bonjours.
    bon merci pour la réponse déjà,
    pour les tutos j'ai passé tout la nuit à chercher une documentation simple mais j'en ai pas trouvé, à chaque fois il y à un code avec une diversion que j'ai du mal à l'adapté a mon code.

    pour les threads, oui c'est la solution parfaite pour ceci sauf que mon code n'arrive pas à reconnaitre les descendants de ma fonction, (variable déclaré globale ...), et voici la déclaration de mon thread que j'ai fait :
    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
     
    public class _socket
        {
            public StreamReader serverStreamReader, clientStreamReader;
            public StreamWriter serverStreamWriter, clientStreamWriter;
     
            public _socket()
            {
                Thread myThread;
                myThread = new Thread(new ThreadStart(TreadServerListining));
                myThread.Start();
            }
     
    /////////////////////////    thread listining SERVER     ////////////////////////
            public void TreadServerListining()
            {
                while (true)
                {
                    MessageBox.Show(serverStreamReader.ReadLine());
                    serverStreamWriter.WriteLine("hello from server");
                    serverStreamWriter.Flush();
                }
            }
    et la mon code n'arrive pas à reconnaitre les commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    serverStreamReader.ReadLine();
    serverStreamWriter.WriteLine("hello from server");
    serverStreamWriter.Flush();
    il me semble que je doit passer des paramètres à mon thread, se que j'ai cherché mais j'ai pas trouvé une bonne documentation

    j'attends vos réponse merci

Discussions similaires

  1. Probleme de memoire lors de la lecture d'une socket
    Par arover dans le forum Réseau
    Réponses: 4
    Dernier message: 02/04/2008, 20h02

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