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 :

[socket] Transfert de fichier


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Points : 55
    Points
    55
    Par défaut [socket] Transfert de fichier
    Bonjour,

    J'essai depuis plus de deux semaines de faire une application client / serveur, qui permet le transfere de fichiers (max 1Mo), mais je n'arrive pas à la faire fonctionner correctement.

    Voici mon code:

    la fonction qui envoi coté client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int DtSent = ClientSocket.Send(buffer, buffer.Length, SocketFlags.None);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     while (true)
                            {
                                byteReceived = ((Socket)readList[i]).Receive(buffer, buffer.Length, SocketFlags.None);
                                // On écrit les données reçues dans le flux.
                                ms.Write(buffer, 0, byteReceived);
                                if(byteReceived ==0){break;}
     
                            }
    Mais le problème c'est que parfois le buffer peux etre vide alors que le transfert n'est pas encore terminé donc cette solution "if(byteReceived ==0){break;}" n'est pas bonne.

    comment savoir si mon transfert est terminé ou pas?

    Adrien

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    Coté emetteur, avant d'envoyer le fichier, j'enverrais une trame d'information indiquant la taille du fichier envoyer après

    Comme cela, le receveur saura combien d'octets il doit recevoir

    Non ?
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    Oui c'est une bonne idée mais si j'ai plusieurs clients je risque de mélanger les trames.

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    pourquoi veux tu mélanger les trames ?

    Au pire, tu mets un identifiant pour chaque trame comme cela, tu evites tout risque de mauvaise interprétation des données par le receveur !!!

    Genre un trame =

    1 octet d'identifiant + les données

    Enfin, c'est une idée

    Sans connaitre plus le contexte de ton application, je ne peux pas facilement en dire plus sur ce qui pourrait être fait pour que ce soit optimal
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Les classes TcpClient et TcpListener du Framework permettent de répondre à ton besoin et sont un peu plus "haut niveau" que la classe Socket.

    Microsoft recommande leur utilisation pour les cas de transfert "simples":
    http://msdn.microsoft.com/en-us/libr...er(VS.71).aspx
    http://msdn.microsoft.com/en-us/libr...nt(VS.71).aspx
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

Discussions similaires

  1. [socket] Transfert de fichier, Bug d'envoi des BYTE
    Par mnemonic78 dans le forum C#
    Réponses: 1
    Dernier message: 14/06/2008, 18h22
  2. Socket: transfert de fichiers
    Par timtima dans le forum Réseau
    Réponses: 5
    Dernier message: 28/11/2007, 12h54
  3. [Sockets] transfert de fichier client/serveur
    Par alex6891 dans le forum Développement
    Réponses: 6
    Dernier message: 20/03/2006, 16h14
  4. [Socket]Transfert données + fichier
    Par willowII dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 17/08/2005, 23h08
  5. [Socket]Transfert de fichier
    Par Aminos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/04/2003, 13h58

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