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 :
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 public static byte[] ImageToByte(Image img) { try { ImageConverter converter = new ImageConverter(); return (byte[])converter.ConvertTo(img, typeof(byte[])); } catch { return null; } }
Comme vous pouvez le voir, avant d'envoyer le tableau avec Stream.Write, j'envoie "IM/ + taille du tableau"
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 { } }
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 :
NB: buffersize = taille du tableau
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);
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 :
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 !
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);![]()
Ind6x
Partager