Comme je l’ai dis dans mon précédant post, je programme un serveur en Java et je galère avec un problème de codage.
Lorsque je transfert un fichier texte, il n’y a pas de soucis mais lorsque je transmet un fichier binaire comme une image, je vous laisse vérifier le résultat par vous même :
a l’arrivée
C’est un problème d’encodage de caractères mais je n’arrive plus à trouver la solution. A noter que ce même programme sous linux fonctionne nickel.
Un bout de code coté client :
// Création de la socket et des flux
Socket socket = new Socket(ip, Serveur.PORT);
in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "ISO-8859-1"));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "ISO-8859-1"));
et coté serveur :
in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "ISO-8859-1"));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "ISO-8859-1"));
Ca tombe bien, on est en train de faire un serveur TFTP en TP en ce moment. Les fichiers, on les transfère exclusivement en binaire avec des FileInputStream et FileOutputStream, et surtout pas en texte. Il me semble que pas mal de monde recommande de mettre son client FTP en binaire pour transférer autre chose que du texte d’ailleurs (mais maintenant, tout se fait automatiquement).
[quote name=‘LeBaronNoir’ date=’ 18 Feb 2005, 15:19’]Ca tombe bien, on est en train de faire un serveur TFTP en TP en ce moment. Les fichiers, on les transfère exclusivement en binaire avec des FileInputStream et FileOutputStream, et surtout pas en texte. Il me semble que pas mal de monde recommande de mettre son client FTP en binaire pour transférer autre chose que du texte d’ailleurs (mais maintenant, tout se fait automatiquement).
[right][post=“334012”]<{POST_SNAPBACK}>[/post][/right][/quote]
Je verrai ca lundi au TAF mais à mon avis, effectivement il faut utiliser autre chose que le BuffuredWriter et Reader.
Je me répond à moi même, il faut utiliser le BufferedWriter et le BufferedReader pour le texte, mais envoyer le fichier avec la méthode InputStream.write(byte[], int, int); et non pas BufferedWriter.write(char[], int, int)