[Socket] Envoie de fichiers exe [Résolu]

ZedMaTrix 178 Messages postés vendredi 25 octobre 2002Date d'inscription 14 août 2008 Dernière intervention - 2 oct. 2006 à 09:17 - Dernière réponse : ZedMaTrix 178 Messages postés vendredi 25 octobre 2002Date d'inscription 14 août 2008 Dernière intervention
- 3 oct. 2006 à 21:05
Hello à tous.


Je cherche à tranférer des fichiers exe par des sockets, et j'ai donc fais le tour des sources du site, mais impossible :/


Donc j'ai fais un serveur avec un socket principal qui recoie et
accepete les connections. Lorsque ca arrive, ce socket principal créer
un nouveau socket ( socket client ) dynamique ( Load ) qui sera
l'intermédière entre le client et le serveur.


Le client demande un fichier exe au serveur. J'ai donc créer une
fonction, sur le serveur, EnvoieFichier() avec en paramètre le nom du
fichier, et l'index du socket. La fonction ouvre le fichier en mode
binary, et lis les 8000 premier bytes ( Dim buffer() As Byte ) et
l'envoie dans la socket.


Le client recoie les données et enregsitre ce qu'il vient de recevoire.


Ensuite j'ai un timer sur le serveur qui va envoyer toutes les x
secondes le reste du fichier. Donc sur un label j'enregistre la taille
envoyé par la socket, pour que la fonction reprenne l'envoie ou il en
était.


Au final, le soucis c'est que mon client enregistre un fichier de 153Kb au lieu de 96Kb.


Donc je sais pas trop... Je suppose que c'est à la lecture du fichier,
ou alors le serveur envoie en binaire, mais le client lui en string, je
sais pas...


Bref, je cherche une source qui montre comment transfere un fichier exe
nikel. Et derriere, moi je chercherais à faire le multitransfere


Merci !

ZedMaTriX
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 2 oct. 2006 à 19:31
3
Merci
Salut
Contrairement à ce que tu dis, la réponse est parmi les codes de ce site, comme celle-ci (mais pas la plus simple ni la plus efficace) : clique ici.
Fais une simple recherche de "transfert fichier" et tu n'auras que l'embarras du choix !

Ton poblème vient du fait que tu ne gères pas les flux.
Avant d'envoyer le contenu de ton fichier, il serait bon d'envoyer des infos importantes au client :
- le nom du fichier
- la taille du fichier (en bytes)
Pour cela, il va falloir struturer tes échanges :
A chaque envoi, il faut dire au client ce qu'il va recevoir grace à un entête (mots clés) que le client saura détecter en tête de chaque paquet
Exemple : "#Nom fichier#", "#Taille fichier#", "#Données fichier#"
Les # ne sont là que pour singulariser le texte et ne pas le confondre avec des données = plus facile à repérer.
Exemples :
monWinsock.SendData "#Nom fichier#" & "toto.exe" & "#"
monWinsock.SendData "#Taille fichier#" & FileLenght("toto.exe") & "#"
Open "mon fichier exe que je veux transférer.exe" For Binary As #1
Do While Not EOF(1)
   Lecture8k = Space(8192)   ' <--- (*)
   Get #1, , Lecture8k
   monWinsock.SendData "#Qté données qui suivent#" & "8192" & "#" & Lecture8k
Next r
Close #1
(*) Pour la taille du buffer à lire, il faudra gérer la fin du fichier qui ne tombera pas sur un multiple de 8192 !

A la réception, il faudra compter le nombre de bytes de données reçues pour savoir si c'est terminé.

Mais j'insiste, ces solutions sont dans les codes du site.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de cs_Jack
ZedMaTrix 178 Messages postés vendredi 25 octobre 2002Date d'inscription 14 août 2008 Dernière intervention - 3 oct. 2006 à 21:05
0
Merci
Merci à toi jack pour ta réponse.

Enffet, j'ai oublié de poster pour dire que s'était bon ! J'ai encore et encore fouillé les sources, et je suis tombé sur un code source qui fonctionnait, je l'ai analysé, et j'ai réglé mon soucis :D

Et je doit dire que tu es tout à fais dans le vrai !!

Merci encore à toi !! :)

ZedMaTriX
Commenter la réponse de ZedMaTrix

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.