[Socket] Envoie de fichiers exe

Résolu
ZedMaTrix Messages postés 178 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 14 août 2008 - 2 oct. 2006 à 09:17
ZedMaTrix Messages postés 178 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 14 août 2008 - 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

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 oct. 2006 à 19:31
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
3
ZedMaTrix Messages postés 178 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 14 août 2008
3 oct. 2006 à 21:05
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
0
Rejoignez-nous