gta126
Messages postés18Date d'inscriptiondimanche 9 juillet 2006StatutMembreDernière intervention29 mars 2011 11 nov. 2011 à 16:26
L'intéret de coder en base64 est dans mon cas de pouvoir transmettre des fichiers binaires par réseaux via les composant Indy.
Il y a peut-être une autre façcon de faire pour transmettre des fichiers binaires en réseaux mais je vous explique comment j'ai fait:
1. Par exemple le client demande au serveur un fichier
2. Le serveur ouvre le fichier dans un TFileStream
3. Le serveur lit par exemple les 1024 premiers octets (moins si le fichier est plus petit) et les stockes dans un string (WideString étant sous Delphi XE2)
4. Le serveur code cette string en base64 car la fonction WriteLn des composants Indy pose problème avec des caractères non imprimable (qui sont en grand nombres dans les fichiers binaires).
5. Le serveur envoie les données codées en base64 au client
6. Le client décode les données lues
7. Le client écrit dans un fichier les données reçues
8. Le client demande la suite
etc jusqu'à tout recevoir.
Si d'ailleur il existe une meilleur façcon de transmettre des fichiers en réseaux, je serais ravis de le savoir.
Ici j'ai gérer le cas que les string sont en Unicode donc les caractères sont sur 2 octets ce qui est bien différent que des AnsiString qui elles sont sur 1 octet.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 9 nov. 2011 à 12:36
Bonjour,
ce qui aurait été bien, c'est d'indiquer
l'intérêt d'une telle codification, du moins celle que tu aurais notée.
11 nov. 2011 à 16:26
Il y a peut-être une autre façcon de faire pour transmettre des fichiers binaires en réseaux mais je vous explique comment j'ai fait:
1. Par exemple le client demande au serveur un fichier
2. Le serveur ouvre le fichier dans un TFileStream
3. Le serveur lit par exemple les 1024 premiers octets (moins si le fichier est plus petit) et les stockes dans un string (WideString étant sous Delphi XE2)
4. Le serveur code cette string en base64 car la fonction WriteLn des composants Indy pose problème avec des caractères non imprimable (qui sont en grand nombres dans les fichiers binaires).
5. Le serveur envoie les données codées en base64 au client
6. Le client décode les données lues
7. Le client écrit dans un fichier les données reçues
8. Le client demande la suite
etc jusqu'à tout recevoir.
Si d'ailleur il existe une meilleur façcon de transmettre des fichiers en réseaux, je serais ravis de le savoir.
Ici j'ai gérer le cas que les string sont en Unicode donc les caractères sont sur 2 octets ce qui est bien différent que des AnsiString qui elles sont sur 1 octet.
9 nov. 2011 à 12:36
ce qui aurait été bien, c'est d'indiquer
l'intérêt d'une telle codification, du moins celle que tu aurais notée.