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 :

[C#]Réception de fichier par Socket


Sujet :

C#

  1. #1
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut [C#]Réception de fichier par Socket
    Bonjour à tous,

    Je développe présentement une application client/server qui envoie des fichiers lorsque certaines conditions spécifiques sont rencontrées. Mais, mon problème est le suivant: lorsque le fichier arrive du coté serveur, il ne s'écrit pas au complet sur le disque. Le fichier est bien envoyé au complet mais la réception semble douteuse et pourtant ce code seul marche très bien.

    Aussi, dès que j'augemente la taille du buffer, et bien une plus grosse partie du fichier s'inscrit sur le disque mais avec un buffer de 5mo et un document Word de 96k, je crois en avoir emplement!

    Alors si quelqu'un une idée, ce serait bien apprécié!

    Merci,
    Friedrick

    Code 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
    public void StartServer()
    {
        try
        {
            sock.Listen(100);
            Socket clientSock = sock.Accept();
            byte[] clientData = new byte[1024 * 5000];
            int receivedBytesLen = clientSock.Receive(clientData);
            int fileNameLen = BitConverter.ToInt32(clientData, 0);
            string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);
            BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + "/" + fileName, FileMode.Create));
            bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);
            bWrite.Close();
            clientSock.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
        }
    }
    Code 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
    public static void SendFile(string fileName)
    {
        try
        {
            IPAddress[] ipAddress = Dns.GetHostAddresses("192.168.110.159");
            IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
            Socket clientSock = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.IP);
            string filePath = "";
            fileName = fileName.Replace("\\", "/");
            while (fileName.IndexOf("/") > -1)
            {
                filePath += fileName.Substring(0, fileName.IndexOf("/") + 1);
                fileName = fileName.Substring(fileName.IndexOf("/") + 1);
            }
            byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);
            byte[] fileData = File.ReadAllBytes(filePath + fileName);
            byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
            byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
            fileNameLen.CopyTo(clientData, 0);
            fileNameByte.CopyTo(clientData, 4);
            fileData.CopyTo(clientData, 4 + fileNameByte.Length);
            clientSock.Connect(ipEnd);;
            clientSock.Send(clientData);
            clientSock.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
        }
    }

  2. #2
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    J'ai refais quelques tests et il semblerait que ca soit la réception de mes paquets qui ne fonctionne pas. La taille varie à chaque réception. Il y a-t-il une méthode pour que le socket reste ouvert jusqu'à la fin de la réception ?

    Merci,
    Friedrick

  3. #3
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Points : 1 276
    Points
    1 276
    Par défaut
    Petite question (pque j'aime ca !),
    pourquoi tu passes pas par WCF en mode binaire, et en streamant ?

  4. #4
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut
    Parce que je ne savais pas qu'on pouvait faire cela? Je vais regarder le WCF et peux-être que ce sera mieux!

    Merci du tuyau!
    Friedrick

  5. #5
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Points : 1 276
    Points
    1 276
    Par défaut
    bah de rien ! avec plaizzz !

  6. #6
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut
    Ce semble une très bonne solution mais je ne fais pas cette application au niveau du web. C'est peut-être moi qui est très mauvais et ne trouve pas la bonne documentation. Si jamais tu as un bon lien, ce serait bien apprécié !

    Merci,
    Friedrick

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Pour deux pcs qui utilisent .net tu peux utiliser un nettcpbinding http://msdn.microsoft.com/fr-fr/libr...cpbinding.aspx

  8. #8
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Points : 1 276
    Points
    1 276
    Par défaut
    En fait, tu peux héberger du wcf dans iis, ou dans du hosting applicatif (style winform, wpf, service windows) sans problème, atta je cherche une source

  9. #9
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Points : 1 276
    Points
    1 276
    Par défaut
    Exemples :

    http://webman.developpez.com/articles/dotnet/wcf/intro/

    http://www.codeproject.com/KB/WCF/st...on-in-wcf.aspx

    Et en book tu as WCF in action qui est sympa... enfin c'est mon avis,


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

Discussions similaires

  1. envoye fichier par socket
    Par ac/dc dans le forum Réseau
    Réponses: 3
    Dernier message: 01/12/2006, 20h46
  2. Envoi d'un fichier par socket
    Par Aleksis dans le forum C++
    Réponses: 12
    Dernier message: 12/08/2006, 05h10
  3. Réponses: 3
    Dernier message: 06/03/2006, 10h36
  4. Transfert de fichiers par sockets
    Par Kaori dans le forum C++
    Réponses: 19
    Dernier message: 26/01/2005, 13h58
  5. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58

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