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 :

Préfixé avec la longueur une requête envoyé par socket [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 95
    Points : 71
    Points
    71
    Par défaut Préfixé avec la longueur une requête envoyé par socket
    Bonjour,

    Je dois envoyer une requête a un device via un socket TCP.
    Le message doit être pré-fixé avec deux octets contenant la longueur du message. L'information de longueur est envoyée dans l'ordre des octets du réseau (big-endian).

    J'ai trouvé cela sur le net mais ça ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    byte[] dataArray = Encoding.ASCII.GetBytes(requete);
     
                    int reqLen = requete.Length;
                    int reqLenH2N = IPAddress.HostToNetworkOrder(reqLen);
     
                    byte[] reqLenArray = BitConverter.GetBytes(reqLen);
     
                    s.Send(reqLenArray, 2, SocketFlags.None);
     
                   int sizeReturn = s.Send(dataArray, dataArray.Length, SocketFlags.None);
    Merci de votre aide


    Francky

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Bitconverter retourne 4 octets pour un int
    Utilise un short ou ushort selon ce que ça attend
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 95
    Points : 71
    Points
    71
    Par défaut
    Je viens de faire la modification de int en short et ça ne marche toujours pas.

    La documentation me parle de big-endian. je ne sais pas si je suis partie sur la bonne voie avec mon morceau de code.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si si je pense

    par contre nos pcs classiques sont à priori en little endian
    il faut donc faire un array.Reverse pour inverser les octets retournés par bitconverter.getbytes

    ils te parlent de signé / non signé pour l'int16 de la taille ?

    et tu peux aussi redémarrer le device des fois qu'il attende toujours des octets ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 95
    Points : 71
    Points
    71
    Par défaut
    J'ai réussi.
    Tes reflexions sur la longueur des variables m'ont beaucoup aidé

    J'ai du modifié mon code.

    Je ne fais plus 2 envoie différents mais j'ai concaténé mes array de byte.

    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
     
     
    byte[] dataArray = Encoding.ASCII.GetBytes(requete);
     
     
                    short reqLen = (short)requete.Length;
                    short reqLenH2N = IPAddress.HostToNetworkOrder(reqLen);
     
     
                    byte[] reqLenArray = BitConverter.GetBytes(reqLenH2N);
     
     
                    byte[] ret = new byte[dataArray.Length + reqLenArray.Length];
                    reqLenArray.CopyTo(ret, 0);
                    dataArray.CopyTo(ret, reqLenArray.Length);
     
     
                    int sizeReturn = s.Send(ret, ret.Length, SocketFlags.None);

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/07/2012, 23h09
  2. Envoyer une requête SQL par un MultiCastUDP
    Par Eausport dans le forum Général Java
    Réponses: 5
    Dernier message: 20/07/2012, 10h16
  3. [SQL] pb avec une requête envoyée à une bdd chez free
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 22/02/2008, 16h24
  4. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53
  5. Réponses: 2
    Dernier message: 02/06/2005, 18h12

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