Reception/Envoi incomplet de Byte[] avec TCP.
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:
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:
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:
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:
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, :pastaper: j'ai cette ligne dans mon projet :
Code:
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 ! :)
:merci:
Ind6x