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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé Avatar de Couz02
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 232
    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 averti
    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
    Par défaut
    Ok, je vais essayer ça.

  4. #4
    Membre averti
    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
    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 averti
    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
    Par défaut
    PS: les erreurs concernent :
    Thread^ newThread = gcnew Thread(gcnew ThreadStart(&ThreadProc));

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

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

  7. #7
    Membre averti
    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
    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)

+ 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, 17h30
  2. Terminer proprement une boucle d'écoute
    Par chicorico dans le forum C
    Réponses: 5
    Dernier message: 05/04/2012, 11h06
  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, 12h45
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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