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 :

Passage de paramètre qui ne fonctionne pas


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Formateur en informatique
    Inscrit en
    Janvier 2011
    Messages
    134
    Détails du profil
    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 134
    Par défaut Passage de paramètre qui ne fonctionne pas
    Bonjour à tous,

    J'ai 2 programmes un client et un serveur.

    Dans mon programme serveur j'ai une classe Server qui "écoute" sur un port ...
    Quand un message est reçu :
    - il est retourné au client avec la mention "Recu ..."
    - et une méthode d'un "objet" RpiServeur est appellée avec passage d'un paramètre.

    Le client reçoit bien car je vois le texte en retour qui s'affiche
    La méthode est bien appelée car une méthode AllumeLed() est bien déclenchée
    Mais le Switch Case ne marche pas : le texte n'est pas reconnu ... enfin c'est ce que je pense mais comme je débute c'est pas sûr !!

    Comme le serveur est sur un raspberry, et que le débogage marche pas (ou je ne sais pas comment le faire marcher), j'arrive pas à voir ce qui se passe au niveau du string Commande de la méthode CommanderRpi

    Merci d'avance.


    Extrait du 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
            public Server()
            {
                listener = new StreamSocketListener();
                listener.ConnectionReceived += OnConnection;
            }
     
            private async void OnConnection(StreamSocketListener sender,StreamSocketListenerConnectionReceivedEventArgs args)
            {
                try
                {
                    StringBuilder request = new StringBuilder();
                    using (IInputStream input = args.Socket.InputStream)
                    {
                        byte[] data = new byte[BufferSize];
                        IBuffer buffer = data.AsBuffer();
                        uint dataRead = BufferSize;
                        while (dataRead == BufferSize)
                        {
                            await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial);
                            request.Append(Encoding.UTF8.GetString(data, 0, data.Length));
                            dataRead = buffer.Length; 
                        }
                        RpiServeur.CommanderRpi(request.ToString());    /// C'est cet Appel qui pose problème 
                    }
                    using (IOutputStream output = args.Socket.OutputStream)
                    {
                        using (Stream resp = output.AsStreamForWrite())
                        {
                            string message = "Reçu : " + request.ToString();
                            byte[] messageArray = Encoding.UTF8.GetBytes(message);
                            await resp.WriteAsync(messageArray, 0, messageArray.Length);
                            await resp.FlushAsync();
                        }
                    }
                }
                catch(Exception exception)
                {
                    if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown)
                    {
                        throw;
                    }
                }
            }
    Méthode appelée :

    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
    public void CommanderRpi(string Commande)
            {
                switch (Commande)
                {
                    case "MoteurAvant":
                        moteur1.MotorAvant();
                        break;
                    case "MoteurArriere":
                        moteur1.MotorArriere();
                        break;
                    case "MoteurStop":
                        moteur1.MotorStop();
                        break;
                }
                AllumeLed();        // La méthode appelée fonctionne car je vois AllumeLed qui fonctionne
                                          // et si j'avais mis moteur1.MotorAvant(); le moteur aurait bien fonctionné ...
                                          // Donc c'est le String qui passe pas ????
            }
    Extrait du code du client :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     private void buttonAvant_Click(object sender, RoutedEventArgs e)
            {
                EnvoiMessage("MoteurAvant");
            }


    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
    47
            private async void EnvoiMessage(string Message)
            {
                StreamSocket socket = new StreamSocket();
     
                HostName hostName = new HostName(textBoxIP.Text);
                try
                {
                    await socket.ConnectAsync(hostName, "18000");
                }
                catch (Exception exception)
                {
                    if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown)
                    {
                        throw;
                    }
                }
     
                uint BufferSize = 8192;
                StringBuilder request = new StringBuilder();
     
                // ECRITURE //
                using (IOutputStream output = socket.OutputStream)
                {
                    using (Stream resp = output.AsStreamForWrite())
                    {
                        string message = Message;
                        byte[] messageArray = Encoding.UTF8.GetBytes(message);
                        await resp.WriteAsync(messageArray, 0, messageArray.Length);
                        await resp.FlushAsync();
                    }
                }
                using (IInputStream input = socket.InputStream)
                {
                    byte[] data = new byte[BufferSize];
                    IBuffer buffer = data.AsBuffer();
                    uint dataRead = BufferSize;
                    while (dataRead == BufferSize)
                    {
                        await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial);
                        request.Append(Encoding.UTF8.GetString(data, 0, data.Length));
                        dataRead = buffer.Length;
                    }
                }
                textBoxComment.Text += "\r\n" + request.ToString();    // Ici je vois bien "Reçu : MoteurAvant"
                socket.Dispose();
     
            }

  2. #2
    Membre éprouvé
    Formateur en informatique
    Inscrit en
    Janvier 2011
    Messages
    134
    Détails du profil
    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 134
    Par défaut
    J'ai trouvé :

    Je récupère le texte dans data qui est un tableau de taille (BufferSize) plus grand que le message ... il y a donc des caractères null à la fin ...
    je les supprimes avec un trim :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.Append(Encoding.UTF8.GetString(data, 0, data.Length).TrimEnd('\0'));
    snif ... j'ai une larme ... 5 jours que j'étais sur ce prog ... et ça y est enfin ça marche !
    ... quand même, moi qui sort du VBA, et qui commence le c# et bien je trouve que ça fait mal, mais c'est trop génial !

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/12/2010, 11h58
  2. [AC-2010] Requête paramétrée qui ne fonctionne pas
    Par rougaille974 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/11/2010, 20h16
  3. Requete paramétrée qui ne fonctionne pas
    Par bestall666 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/02/2007, 21h58
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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