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 :

Socket - Envoye une série de Byte Null à la fin


Sujet :

C#

  1. #1
    Membre régulier Avatar de deejay2221
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 98
    Points : 78
    Points
    78
    Par défaut Socket - Envoye une série de Byte Null à la fin
    Bonjours

    Mon programme envoye une image sous forme de Byte[] à travers un socket (TcpClient).
    Mon serveur reçoit le début de l'image exactement comme il a été envoyé mais la fin en rempli de caractère null

    Je fais comme suit (en gros) :
    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
     
    // --------------
    // code client 
    // --------------
    m_memoryStream = new MemoryStream();
    Bitmap ecran = (...);
    ecran.Save(m_memoryStream, System.Drawing.Imaging.ImageFormat.Gif);
    // m_stream est le stream d'un TcpClient
    m_stream.Write(m_memoryStream.ToArray(), 0, m_memoryStream.Length);
     
    // --------------
    // code serveur
    // --------------
    Byte[] m_contenuCourant = Byte[...];
    //m_stream est le stream d'un TcpListener
    m_stream.Read(m_contenuCourant, 0, m_contenuCourant.Length)
    MemoryStream ms = new MemoryStream(m_contenuCourant);
    Bitmap bm = new Bitmap(ms);  // Erreur ici
    L'erreur dit "Paramètre invalide" puisque la fin du fichier est corrompu.
    Il est possible de passer de Bitmap > MemoryStream > Bitmap. Sur le même projet, ça fonctionne bien. J'ai des soucis lors de l'envoye par socket.

    Quelqu'un a déjà vu ce problème avant ?

    Merci beaucoup

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    m_contenuCourant.Length est la taille du buffer que tu as alloué, pas le nombre d'octets réellement lus... il faut récupérer la valeur de retour de m_stream.Read pour connaître le nombre d'octets réellement reçus, et ne prendre en compte que ceux-là. A la fin du tableau tous les octets ont leur valeur par défaut, ç'est-à-dire 0...

  3. #3
    Membre régulier Avatar de deejay2221
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 98
    Points : 78
    Points
    78
    Par défaut
    Eh oké, je n'ai pas l'impression de comprendre.
    Comment on fait alors pour savoir la taille qu'on va reçevoir avant même de recevoir les données.

    De la façon que je comprend, il faudrait que dans le paramètre "longueur", il faudrait que je mette la taille indiqué par le int de Read(). Sauf qu'on a cette valeur qu'une fois la commande exécutée. Je suis un peu perdu.

    Merci

  4. #4
    Membre régulier Avatar de deejay2221
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 98
    Points : 78
    Points
    78
    Par défaut
    Ah oké
    Je viens de comprendre le truc avec le offset. C'est magique

    Merci beaucoup, ça fonctionne parfaitement

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

Discussions similaires

  1. [Socket][File] Envoyer un tableau de byte
    Par itsmii dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 30/01/2014, 09h10
  2. [Socket] Envoyer une donnée en hexa
    Par sorry60 dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 23/02/2009, 14h48
  3. Comment envoyer une adresse par le port série
    Par christophe_s46 dans le forum WinDev
    Réponses: 3
    Dernier message: 10/09/2007, 01h52
  4. [api windows]envoyer une BMP par une socket
    Par hansaplast dans le forum Windows
    Réponses: 12
    Dernier message: 31/01/2006, 13h43
  5. Envoyer une Byte au ComPort Com1
    Par Soulama dans le forum Composants VCL
    Réponses: 1
    Dernier message: 27/07/2005, 08h40

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