problème de taille de l'information a envoyer

ralf9 Messages postés 14 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 14 mars 2010 - 14 mars 2010 à 15:50
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 14 mars 2010 à 17:05
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

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
14 mars 2010 à 17:05
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!
0
Rejoignez-nous