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

C# Discussion :

TCPClient et TCP Listenner


Sujet :

C#

Vue hybride

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut TCPClient et TCP Listenner
    Bonjour,
    je souhaite développer un serveur (le client est déjà codé). Mon serveur doit envoyé une image au client.

    La connexion avec le client s'effectue sans probleme, il m'envoit le port et qu'elle image il souhaite recevoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
               TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 11113);
                server.Start();
                byte[] Buffer = new byte[256];
                string message;
                Console.WriteLine("Attende de connexion...");
     
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connecté !");
     
                NetworkStream stream = client.GetStream();
                int nbLus = stream.Read(Buffer, 0, Buffer.Length);
     
                message = Encoding.ASCII.GetString(Buffer);
    Ensuite je dois lui envoyé l'id de l'image, la taille de l'image et ensuite l'image:

    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
     
     TcpClient clientDonnees = new TcpClient();
                clientDonnees.Connect("127.0.0.1", portD);
                Console.WriteLine("Connecté données !");
     
                NetworkStream NS = clientDonnees.GetStream();
                BinaryWriter BW = new BinaryWriter(NS);
     
                BW.Write((string)idImage);
                BW.Write('\n');
     
                FileStream fs = new FileStream("image.bmp", FileMode.Open, FileAccess.Read);
                BinaryReader BR = new BinaryReader(fs);
                //---------------------Taille du fichier
                FileInfo _file_info = new FileInfo("image.bmp");
     
                BW.Write((long)_file_info.Length);
                BW.Write('\n');
     
                //------------------envoie du fichier
                byte[] _buff_end;
                for (long i = (_file_info.Length / 1480); i > 0; --i)
                    BW.Write((byte[])BR.ReadBytes(1480));
     
                if ((_file_info.Length % 1480) != 0)
                {
                    _buff_end = new byte[_file_info.Length % 1480];
                    BW.Write((byte[])BR.ReadBytes(_buff_end.Length));
                }
    je me retrouve avec une erreur comme quoi la connexion a été interrompue par le client.
    Ma question est; comment utilise t'on les tcp client ou tcp listenner, dans quel cas on doit utiliser l'un ou l'autre ou les deux.
    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Utiliser des sockets (ou des TcpClient/Listener, ce qui revient quasiment au même) aujourd'hui, c'est un peu du masochisme... Tu ferais mieux de t'orienter vers une solution type web service (WCF par exemple), c'est beaucoup plus facile et tu n'as plus besoin d'écrire de code bas-niveau pour gérer le transfert

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut
    le principe du tp, est d'utiliser ces classes en fete...
    Mais je vois pas pourquoi j'arrive pas a envoyé via mon tcpclient, le message au client

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Par défaut
    Bonjour,

    le problème est ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NetworkStream stream = client.GetStream();
    int nbLus = stream.Read(Buffer, 0, Buffer.Length);
    Tu fais une seul lecture. Ce qui fait que tu va finir par sortir de ta methode, et donc liberer a la fois ton TcpClient, et ton TcpListener, et donc fermé la connexion.
    Tu devrais bouclé, jusqu'a ce que la connexion soit fermé.

    Au passage, si le TcpClient fait un disconnect, ca va lever une exception dans la methode read.

Discussions similaires

  1. TCP listener et TCPclient en vb 2008
    Par walid kh dans le forum VB.NET
    Réponses: 12
    Dernier message: 26/04/2010, 15h36
  2. Réponses: 1
    Dernier message: 20/05/2009, 09h55
  3. [Concept]Concept d'un serveur TCP/IP
    Par Zc dans le forum Développement
    Réponses: 8
    Dernier message: 17/01/2003, 17h06
  4. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  5. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40

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