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

Développement Windows Discussion :

socket et flux continue


Sujet :

Développement Windows

  1. #1
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut socket et flux continue
    Bonjour,

    J'utilise les sockets afin de recuperer en flux continue des informations. Je dois faire des traitements dessus, commme j'ai pl'impression que c'est multi theadé mes traitements echoue.
    J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
    Comment puis je faire que que ce soit dans un seul thread.

    Merci de vos conseils, je maitrise mal le sujet
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 39
    Points
    39
    Par défaut
    Ce que l'on peut voire c'est que tu utilise une fonction asynchrone donc effectivement cela sous entend des threads. Mais tu ne donne aucun détail sur les traitements que tu dois faire...

    Par exemple si tu dois mettre un jour ton interface graphique tu ne pourra pas, car tu ne te trouvera pas dans le "thread principale" dans la méthode "ReceiveCallback".
    Or seul le "thread principal" est habilité à modifier les éléments graphique.

  3. #3
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Comme je recois en flux continue des données, alors il est difficile de traiter de facon separer tout ce que le reseau m'envoie.
    Je dois faire pas mal de traitement sur state.sb , mais avant que je puisse terminer mon traitement state.sb a deja ete modifié

    Comment dois je proceder

    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
     
    private static void ReceiveCallback( IAsyncResult ar ) {
        try {
            // Retrieve the state object and the client socket 
            // from the asynchronous state object.
            StateObject state = (StateObject) ar.AsyncState;
            Socket client = state.workSocket;
            // Read data from the remote device.
            int bytesRead = client.EndReceive(ar);
            if (bytesRead > 0) {
                // There might be more data, so store the data received so far.
                state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,bytesRead));
                    //  Get the rest of the data.
                client.BeginReceive(state.buffer,0,StateObject.BufferSize,0,
                    new AsyncCallback(ReceiveCallback), state);
     
    /////traitement
                receiveDone.Set();
            }
        } catch (Exception e) {
            Console.WriteLine(e.ToString());
        }
    }
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 39
    Points
    39
    Par défaut
    Une première chose à faire déjà, c'est de faire tes traitements avant d'appeler à nouveau la méthode "BeginReceive".
    Car dans ce que je vois de ton code, c'est que tu te remet en écoute de ton flux avant d’effectuer tes traitements, il est donc normal que ton objet "state.sb" change.

    Après il reste les mécanismes de synchronisation des threads tel qu'un SyncLock (http://msdn.microsoft.com/fr-fr/library/3a86s51t.aspx)

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/11/2011, 14h09
  2. Réponses: 17
    Dernier message: 20/02/2011, 23h20
  3. Sockets et flux en général
    Par Ceylo dans le forum Réseau
    Réponses: 9
    Dernier message: 15/03/2008, 05h12
  4. Applet Java sur Boursorama (flux continu) - port 8000
    Par Invité dans le forum Applets
    Réponses: 4
    Dernier message: 02/02/2006, 23h05
  5. [Stratégie] Lecture ponctuelle d'un flux continu
    Par christopheJ dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/07/2004, 16h30

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