Communication entre client et serveur

kikiokiller Messages postés 42 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 31 mai 2009 - 26 déc. 2008 à 11:09
kikiokiller Messages postés 42 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 31 mai 2009 - 27 déc. 2008 à 12:14
Bonjour,
J'essai de développer une application oû le but est de passer une info type image du client vers le serveur.
J'ai une application client qui doit piloter mon application serveur en réseaux local.
J'utilise donc les tcp pour les relier. Jusque là parfait.
Mais comment dois-je procéder pour prendre une image de mon disque dur client et la faire afficher dans mon application sur le serveur.

D'avance merci.

4 réponses

kerma26 Messages postés 36 Date d'inscription vendredi 11 mai 2007 Statut Membre Dernière intervention 20 août 2009
26 déc. 2008 à 12:53
Salut,

Donc si j'ai bien compris, de ton client tu veux transférer une image vers ton serveur et qu'elle s'affiche directement.
Donc si c'est bien ça, va falloir que du côté client tu charge une image dans un tableau de bytes, avec :

                System.Drawing.Bitmap bi = new System.Drawing.Bitmap("ton_image_avec_extension"); //en gros t'ouvre l'image tu prend les infos
                MemoryStream memStream = new MemoryStream(); // tu cree un flux
                bi.Save(memStream, System.Drawing.Imaging.ImageFormat.Jpeg); // tu met ton image dans ce flux
                byte[] TabImg = memStream.ToArray(); //tu le trnasforme en tableau de byte
                memStream.Close(); // tu ferme les ressources que tu as utilisé
                memStream.Dispose();//idem
                taSocket.Send(TabImg); // t'envoi le tableau

Bon l'inconvégnant ici c'est qu'on ne donne pas de taille à nôtre tableau de byte donc plus ton image est grosse et plus sa va te bouffer le la mémoire mais bon.
Ensuite du côté serveur, tu reçoit donc un tableau de byte :

                taSocket.receive(tonImg);//bon la synthaxe ne doit pas être correcte là, en clair la c'est la récéption côté serv (tonImg = byte[])
                MemoryStream memStr = new MemoryStream(tonImg);//tu met ton tableau dans un flux
                Bitmap bi = new Bitmap(memStr);//tu tranforme se flux en image enfin presque
                pictureBox1.Image = bi; // et la ben soit tu l'affiche dans une picture box pour qu'elle s'affiche directement sans l'enrestrer soit tu peut directement l'enregister sur le                                                    le serveur, apres c'est toi qui voit ce que tu veux en fair.
0
kikiokiller Messages postés 42 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 31 mai 2009
27 déc. 2008 à 10:28
Merci pour cette réponse très pédagogue. Alors voila, j'ai écris ceci du coté client:

private void button1_Click(object sender, EventArgs e)
        {
            TcpClient tcpclient = null;
            try
            {
                tcpclient = new TcpClient();
                Console.Out.WriteLine("Connecting.....");
                tcpclient.Connect("168.192.100.101", 8001);
                Console.Out.WriteLine("Connecté à 168.192.100.101");
            }
            catch
            {
                Console.Out.WriteLine("Impossible de se connecter");

            }
            finally
            {
                if (tcpclient != null)
                {
                    tcpclient.Close();
                }
            }

        }
         private void button2_Click(object sender, EventArgs e)
        {
            System.Drawing.Bitmap photo = new System.Drawing.Bitmap(@"C:\Users\KissCool\Desktop\DSCF1798.Jpg");
            MemoryStream memStream = new MemoryStream();
            photo.Save(memStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            byte[] TabImg = memStream.ToArray();
            memStream.Close();
            memStream.Dispose();

            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sock.Connect(new IPEndPoint(IPAddress.Parse("168.192.100.101"), 8001));
            sock.Send(TabImg);
            }

Mais ca coince du coté serveur, je ne sais pas koi mettre pour lui faire reconnaitre la socket et mon fameu "TabImg". Etant donné que sur le serveur, c'est une application differente, le programme ne comprend pas.
D'avance merci.
0
kerma26 Messages postés 36 Date d'inscription vendredi 11 mai 2007 Statut Membre Dernière intervention 20 août 2009
27 déc. 2008 à 11:49
Ok, je pense avoir une petite idée du problème et aussi une petite idée de la solution, mais il faudrait que tu poste le bout de code de réception côté serveur.
Je pense que tu doit recevoir une chaine de caractère et il faudrait donc convertir cette chaine en byte avec la commande :
- "Byte[] tabImg = Encoding.ASCII.GetBytes(string se_que_tu_reçoit)"
enfin ça ce n'est que supposition.
0
kikiokiller Messages postés 42 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 31 mai 2009
27 déc. 2008 à 12:14
Puis-je me permettre de te donner mon adresse msn, si tu as un peu de temps à me consacrer. Afin que je puisse t'expliquer un peu mieux mon projet et le but de la manipulation.
Je pense aussi que se sera plus simple. Je mettrais ta solution sur ce forum une fois le problème réglé.
kikiokiller@hotmail.fr

D'avance merci.
0
Rejoignez-nous