problème de taille de l'information a envoyer

Signaler
Messages postés
14
Date d'inscription
dimanche 15 avril 2007
Statut
Membre
Dernière intervention
14 mars 2010
-
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
-
bonjour,

j'ai un soucis avec la quantité d'information a envoyer, en effet, je voudrais transmettre une image d'un pictureBox vers un autre pictureBox sur une application distante, mais j'ai eu un problème, mon image arrive mais pas complète ! j'ai déclaré un tableau de byte qui contiendra mon image mais avec une taille bien limitée, c'est a cause de ca et je ne peux pas donner une taille très grande a ce tableau car ca bugue par la suite qu'est ce que je peux faire ?

voici mon code :

serveur :

// c'est juste le thread que j'ai donné 

public void att_serveur()
        {
            s.Start();
            c2 = s.AcceptTcpClient();
            Invoke(new Action(delegate { label1.Text = "Connecté ..."; }));
            
            do
            {
                str2 = c2.GetStream();
                b2 = new byte[1200]; // déjà comme ca et ca se bloque !

                MessageBox.Show("bloque");

                if (str2.Read(b2, 0, b2.Length) != -1) //vérifier s'il ya quelque chose dans le flux de données
                {
                    
                    string msg = Encoding.ASCII.GetString(b2, 0, b2.Length);

                    if (msg.IndexOf("txt") == 0) // marqueur pour différencier entre texte et image
                    {
                        Invoke(new Action(delegate { textBox1.Text = msg.Remove(0, 3); }));
                    }
                    else
                    {
                        img = new Bitmap(new MemoryStream(b2));
                        Invoke(new Action(delegate
                        {
                            pictureBox_img.Image = img;
                        }));
                    }
                }
            } while (true);
        }


client :

    /**************** se connecter au serveur PDA **************/
        private void menuItem2_Click(object sender, EventArgs e)
        {
            try
            {
                c1 = new TcpClient("192.168.2.102", 12377);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        /****************** Ouvrir Image **********************/
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Files image JPEG (*.jpg)|*.jpg";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                img = new Bitmap(openFileDialog1.FileName);
                pictureBox_img.Image = img;

                ms = new MemoryStream();
                pictureBox_img.Image.Save(ms, ImageFormat.Jpeg);


                b = ms.GetBuffer(); //convertir le contenu de l'image en bytes
                ms.Close();
            }
        }

        /******************** envoyer image ************************/
        private void button_sendImage_Click(object sender, EventArgs e)
        {
            str1.Write(b, 0, b.Length);
        }


voila je vois pas comment faire ?!

1 réponse

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonsoir

La taille du buffer dans un networkstream est limitée, je crois par défaut à 1024 octets
si ton message est plus grand, il faut faire un boucle lors de la réception

regarde ICIpour une aide.


C# is amazing, enjoy it!