IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Utilisation de NetworkStream


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut [C#] Utilisation de NetworkStream
    Bonjour,

    Je voudrais avoir quelques infos sur le .NET remoting.
    J'ai cru comprendre qu'il était possible de passer des objets à d'un client vers un serveur à l'aide de cette "technologie".
    Je voudrais donc savoir s'il est possible de passer un tableau de bytes qui contient tous les octets qui composent une photo.

    Le but étant d'uploader une image sur un serveur par cette méthode.

    Merci pour vos réponses !!!

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    dans ton cas, une socket fera ce que tu veux et de manière bcp plus simple .

    Le remoting permet l'invocation d'objet à distance de la même manière que s'ils étaient locals c'est tout.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Merci pour ta réponse dev01.

    J'ai utilisé, en attendant, la classe tcpclient() pour envoyer les fichiers.
    ça fonctionne mais c'est long. Peut-être que cette lenteur provient du fait que j'envoie un seul octet à chaque fois.
    J'ai fais ceci:
    client:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
            private void button2_Click(object sender, EventArgs e)
            {
                DialogResult dial = openFileDialog1.ShowDialog();
                if (dial == DialogResult.OK)
                {
     
                    byte[] MyBytes;
                    MyBytes = FileToBytes(openFileDialog1.FileName);
                    for(int i=0;i<MyBytes.Length;i++)
                    {
                        Send(MyBytes[i]);
     
                    }
                    stw.Close();
                    MessageBox.Show("File uploaded !!!");
                }
     
            }
     
            public byte[] FileToBytes(string CheminFichier)
            {
                System.IO.FileInfo MonFichier = new System.IO.FileInfo(CheminFichier);
                System.IO.FileStream MonFileStream = MonFichier.OpenRead();
                byte[] TableauDeBytes = new byte[MonFileStream.Length];
                MonFileStream.Read(TableauDeBytes, 0, (int)MonFileStream.Length);
                MonFileStream.Close();
                return TableauDeBytes;
            }
     
            private void Send(byte block)
            {
                stw.Write(block);
                //new Thread(new ThreadStart(WaitResponse)).Start();
            }

    et la partie serveur:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
            public void Run()
            {
     
                this.str = new BinaryReader(LiaisionClient.GetStream());
                this.stw = new BinaryWriter(LiaisionClient.GetStream());
                fs = File.Open("d:\\file", FileMode.Create);
                while (!End)
                {
                    //Lecture
                    try
                    {
                        demande = str.ReadByte();
                        fs.WriteByte(demande);
                        //Traitement
                        reponse++;
                        MyBytes.Add(demande);
                        //Ecriture
                        stw.Flush();
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message.ToString());
                        End = true;
                        fs.Close();
                    }
                }
                LiaisionClient.Close();
     
                MessageBox.Show("Service Arrêté");
            }
    Est-ce que je pourrais envoyer des paquets d'octets plutôt ? Si oui combien ? Et surtout, comment faire pour lire un fichier par paquet d'octets. Quand je vais arrivé au dernier paquet, il ne fera peut-être pas la même taille que les précédents. Bref, pourrais tu me donner une piste pour envoyer des âquets d'octets plutôt que 1 à 1 ...

    Voilà, je ne sais pas comment m'y prendre pour accéler l'envoi ....

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    il suffit d'envoyer par paquet effectivement, le dernier ne sera pas remplis entierement mais si tu utilises directement les methodes de NetworkStream.Read tu auras le nombre d'octets lus

    Pour plus d'info voir la msdn ou l'aide du framework

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Dev01,

    Dis moi si je me trompe mais networkStream fonctionne uniquement pour les sockets non ?
    J'utilise TCPClient là ...

    Y a t'il moyen de connaître combien "d'octets" sont remplis avec BinaryReader ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    En d'autre terme, en utilisant ces tcp_client, comment puis-je savoir quand mon fichier est fini d'uploadé (du côté serveur j'entends) ?

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par LE NEINDRE
    Dev01,

    Dis moi si je me trompe mais networkStream fonctionne uniquement pour les sockets non ?
    oui tu te trompes ... voir la msdn

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo