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

VB.NET Discussion :

[vb.net] Créer fichier temporaire lors envoi de fichier


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut [vb.net] Créer fichier temporaire lors envoi de fichier
    Salut,

    J'ai créer un programme permettant d'envoyer des fichiers par sockets mais je voudrais savoir si il était possible de créer des fichiers temporaires de telle sorte à pouvoir reprendre le transfert si on a annulé ou si il y a eu un problème.

    Comment s'y prendre aussi ?

    Merci
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  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.

    Normalement si tu passes tes fichiers par sockets tu commences par le transformer en tableau de bytes ? Dans ce cas il te suffit de sotcker les nombres de bytes déjà envoyé.

    Lors de la reprise il suffit de reprendre la ou on en ai.

    Evidement de l'autre coté il faut enregistrer dans un fichier binaire ce qui a déjà été transféré

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Exact, j'avais cette idée mais le problème est que si jamais l'utilisateur annule le transfert, comment etre sur que les 4096 octets (car j'envois par packet de 4096) ont bien été recu par le client ?

    Car le truc de prendre la taille de chaque fichier temporaire pour récupérer l'index du stream c'est galère...

    Methode d'envoi :

    J'ouvre le fichier sur le serveur
    j'envoi par packet de 4096 bytes au client
    Creation d'un new fichier sur le client
    Le client recoi les bytes et les ecrit directement dans le fichier
    A la fin du transfert, il ferme le fichier
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    En algorithmique distribuée
    quand A envoie des données à B
    B doit acquiescer (ACK) en envoyant à A le nombre de bytes reçus
    donc si ton tranfert est annulé
    tu sais, par le dernier ACK de B
    combien de bytes ont été effectivement reçus.

  5. #5
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    C'est une posibilité mais dans mon programme, je n'envoi pas la confirmation de reception des données car j'envoi les données en synchrome (socket.send) et donc la parti serveur attent que les données soient bien recues avant de continuer à envoyer. Donc je peux pas récupérer le nombre de bytes envoyés !
    ...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Ca fait bien longtemps que je n'ai pas codé en sockets, mais :

    * la lecture de données sur une socket te renvoie le nombre de bytes lu au niveau du client.
    * donc tu peux récupérer ce nombre pour savoir la quantité d'octets reçus, et les stocker chez ton client dans un fichier temporaire.

    * Si ton téléchargement s'interromp, pas de pb.

    * Si il reprend, alors ton serveur doit demander au client combien d'octets il a déjà reçu, et quand il a la réponse, il n'a plus qu'à relancer le téléchargement là où il en était.

    =====================
    Sinon, plus bas niveau, il me semble, à la lumière de mes vieux cours de réseau, que TCP-IP prévois déjà ce genre de confirmations en envoyant des ACK au serveur. Tu peux essayer de chercher à ce niveau là, je peux rien t'affirmer.

    Si la recherche n'aboutie pas, à ta place, j'irai voir les sources d'eMule, qui lui gère très bien ce genre de problématiques. (ouais c'est pas du .Net, mais ton problème est un problème d'algo distribuée, pas de langage)

  7. #7
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par Aspic
    C'est une posibilité mais dans mon programme, je n'envoi pas la confirmation de reception des données car j'envoi les données en synchrome (socket.send) et donc la parti serveur attent que les données soient bien recues avant de continuer à envoyer. Donc je peux pas récupérer le nombre de bytes envoyés !
    ...
    Ah mais oui... chui con moi...
    Bah si le send attend que les données soient reçues, tu sais à tout moment combien d'octets il y a chez le client. La voilà la partie gérée par TCP/IP
    Il est où le pb maintenant ?

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

Discussions similaires

  1. [SFTP] renommer le fichier temporaire lors du telechargement du fichier
    Par facilus68 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 03/06/2015, 14h08
  2. [AC-2003] Fichier temporaire lors du compactage
    Par Baloo84 dans le forum Sécurité
    Réponses: 3
    Dernier message: 09/07/2012, 09h35
  3. Réponses: 0
    Dernier message: 13/09/2010, 16h04
  4. [Applet] Créer un fichier temporaire
    Par leminipouce dans le forum Applets
    Réponses: 21
    Dernier message: 28/07/2005, 16h16
  5. [VB.NET] Créer et remplir un nouveau fichier Access
    Par Manue.35 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 18/07/2003, 15h42

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