Bonjour !

J'ai une connexion TCP Client/Serveur qui fonctionne très bien.

A l'aide de ce protocole, j'envoie des tableaux de byte[].

Cependant, lors de la réception, je ne reçois pas tous les bytes.

Je m'explique :

J'ai une image. Je récupère les bytes de cette images dans un tableau avec cette fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public static byte[] ImageToByte(Image img)
        {
            try
            {
                ImageConverter converter = new ImageConverter();
                return (byte[])converter.ConvertTo(img, typeof(byte[]));
            }
            catch
            {
                return null;
            }
        }
j'envoie ensuite ce tableau de cette manière :

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
 
public void SendImg()
        {
            try
            {
                Image img = null;
                img = pictureBox1.Image;
 
                byte[] bytesend = ImageToByte(img);
 
                SEND("IM/" + bytesend.Length.ToString());
                stream.Write(bytesend, 0, bytesend.Length);
            }
            catch
            {
            }
        }
Comme vous pouvez le voir, avant d'envoyer le tableau avec Stream.Write, j'envoie "IM/ + taille du tableau"
Cet envoi sert à "dire" au destinataire qu'il faut qu'il s’apprête à recevoir une image d'une taille bien précise.

En effet, je récupère l'image de cette manière :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
byte[] bytes = new byte[buffersize];
stream.Read(bytes, 0, buffersize);
ShowImage(bytes);
NB: buffersize = taille du tableau

la fonction qui permet d'avoir l'image avec le tableau de bytes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public Image byteArrayToImage(byte[] byteArrayIn)
        {
            try
            {
                MemoryStream ms = new MemoryStream(byteArrayIn);
                Image returnImage = Image.FromStream(ms);
                return returnImage;
            }
            catch
            {
                return null;
            }
        }

Le problème : je reçois à chaque fois l'image, mais celle-ci est souvent incomplète. je n'arrive pas a savoir pourquoi, et je ne sais pas si c'est le tableau qui n'est pas envoyé en entier ou si le tableau n'est pas lu en entier. J'ai aussi pensé a une éventuelle "perte", mais j'avoue ne pas avoir plus d'informations sur ce problème.

Merci de votre aide !


J'ai juste une petite question, j'ai cette ligne dans mon projet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
j'ai beau chercher ne trouve pas vraiment d'information sur ce que signifie "extern", même si je pense que c'est parce que l'on fait référence à une class externe au projet. Si une âme charitable pouvait m'expliquer en deux mots cette ligne, je lui serai reconnaissant !



Ind6x