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

Dotnet Discussion :

TCPListener et boucle d'écoute


Sujet :

Dotnet

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut TCPListener et boucle d'écoute
    Bonjour à tous,
    j'utilise la classe TCPListener pour écouter un message d'une autre application. Mon premier test a marché mais par la suite, j'ai voulu faire une boucle d'écoute pour envoyer non plus 1 message mais un nombre illimité
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TcpListener^ tcpListener = gcnew TcpListener( ipAddress,1300 );
    tcpListener->Start(1);
     
    while (true){
    System::Threading::Thread::Sleep(10);
    TcpClient^ client =tcpListener->AcceptTcpClient();
    NetworkStream^ stream = client->GetStream();
    array<Byte>^bytes = gcnew array<Byte>(256);
    stream->Read( bytes, 0, bytes->Length );
    listBox2->Items->Add("Donnée reçue :"+System::Text::Encoding::ASCII->GetString(bytes));
    }
    dans le server. Ceci a pour résultat le blocage de l'application server. J'ai entendu parler de l'utilisation de thread et de sleep mais je ne sais pas comment faire ça.
    Voilà, si quelqu'un peut m'aider sur cette piste ou m'en proposer une autre.
    Merci D'avance.

  2. #2
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    Déjà rien qu'en regardant de loin, je vois que tu réaffecte la variable "bytes" à chaque boucle. Je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array<Byte>^bytes = gcnew array<Byte>(256);
    bytes = nullptr;
    Le mieu serai que tu crée ta variable avant la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TcpListener^ tcpListener = gcnew TcpListener( ipAddress,1300 );
    tcpListener->Start();
    array<Byte>^bytes = gcnew array<Byte>(256);
     
    while (true){
        ...
    }
    Après pour le thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    using namespace System::Threading;
    ...
    oThread = gcnew Thread(gcnew ThreadStart(&ThreadProc)); // création du thread
    ...
    void ThreadProc(void) // la fonction du thread oThread
    {
        ... // code exécuté par le thread
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Ok, je vais essayer ça.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    J'obtiens l'erreur suivante:
    c:\lelogiciel\lelogiciel2005\lelogiciel2005\Form1.h(3300) : error C2276: '&' : opération non conforme sur l'expression d'une fonction membre liée
    c:\lelogiciel\lelogiciel2005\lelogiciel2005\Form1.h(3300) : error C3350: 'System::Threading::ThreadStart' : un constructeur délégué attend 2 argument(s)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    PS: les erreurs concernent :
    Thread^ newThread = gcnew Thread(gcnew ThreadStart(&ThreadProc));

  6. #6
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    Enlève le "&" et dis moi quoi.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    & enlevé:
    error C3867: &'LeLogiciel2005::Form1::ThreadProc' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'LeLogiciel2005::Form1::ThreadProc' pour créer un pointeur vers membre

    error C3350: 'System::Threading::ThreadStart' : un constructeur délégué attend 2 argument(s)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Ok, finalement le problème est résolu:
    - Si la méthode appelée est static, il faut un seul argument: la méthode en question
    - Sinon, il en faut deux, l' "objet" et la "méthode"

  9. #9
    Membre habitué Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    Remets le "&" et j'ai oublié de te dire que la fonction ThreadProc est statique
    Prototypage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    System::Threading::Thread^ oThread;
    static void ThreadProc(void);
    ...
    oThread = gcnew Thread(gcnew ThreadStart(&ThreadProc));
    ...
    void ThreadProc(void)
    {
    ...
    }
    Désolé de pas te l'avoir dit

    EDIT :
    oups, pas assez rapide

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Pas de problème, ton aide a été précieuse.

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

Discussions similaires

  1. [Débutant] TcpListener: blocage lors d'écoute.
    Par spy93 dans le forum C#
    Réponses: 6
    Dernier message: 02/05/2012, 18h30
  2. Terminer proprement une boucle d'écoute
    Par chicorico dans le forum C
    Réponses: 5
    Dernier message: 05/04/2012, 12h06
  3. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 13h45
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 10h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 21h43

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