Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transmission d'octets - problème d'encodage ?

3 réponses
Avatar
O.L.
Bonjour,

Je veux transmettre par une Socket des octets tout bêtes, qui ont 256
valeurs possibles. A l'origine ils sont stockés dans une String.
J'ai essayé par plein de moyen (OutputStream.write(),
PrintWriter.write() ...) mais à chaque fois à l'arrivée j'ai des
erreurs dans ma transmission, à savoir que 2 octets sur 30 ne sont pas
les bons.
A l'arrivée j'ai aussi essayé plusieurs méthodes de lecture, mais
aucune n'a fonctionné correctement.

Comment faire pour envoyer et réceptionner des octets simples dans une
Socket ?

Merci d'avance pour votre aide,
Olivier

--
Olivier Ligny
Créateur web free-lance / www.cyber-tamtam.net

3 réponses

Avatar
Hervé AGNOUX
O.L. wrote:

Bonjour,

Je veux transmettre par une Socket des octets tout bêtes, qui ont 256
valeurs possibles. A l'origine ils sont stockés dans une String.
J'ai essayé par plein de moyen (OutputStream.write(),
PrintWriter.write() ...) mais à chaque fois à l'arrivée j'ai des
erreurs dans ma transmission, à savoir que 2 octets sur 30 ne sont pas
les bons.
A l'arrivée j'ai aussi essayé plusieurs méthodes de lecture, mais
aucune n'a fonctionné correctement.

Comment faire pour envoyer et réceptionner des octets simples dans une
Socket ?

Merci d'avance pour votre aide,
Olivier



Au niveau des octets, il n'y a jamais de problèmes d'encodage. C'est
seulement pour les Strings, lors de la transformation entre String et
octets.

Les problèmes d'encodage entre Strings surviennent en général lorsque deux
machines communiquent, et qu'elles n'ont pas le même encodage par défaut.
Pour qu'une communication de String fonctionne, il faut qu'il y ait le même
encodage, pour le traitement concerné, entre les deux machines.

Lors du passage de String en octets et vice versa, il y a toujours un moyen
de préciser l'encodage.

Par exemple, pour String -> octets : String.getBytes(String charsetName),
et, pour octets -> String : new String(byte[] bytes, String charsetName).

Bonne chance.


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
O.L.
O.L. wrote:

Bonjour,

Je veux transmettre par une Socket des octets tout bêtes, qui ont 256
valeurs possibles. A l'origine ils sont stockés dans une String.
J'ai essayé par plein de moyen (OutputStream.write(),
PrintWriter.write() ...) mais à chaque fois à l'arrivée j'ai des
erreurs dans ma transmission, à savoir que 2 octets sur 30 ne sont pas
les bons.
A l'arrivée j'ai aussi essayé plusieurs méthodes de lecture, mais
aucune n'a fonctionné correctement.

Comment faire pour envoyer et réceptionner des octets simples dans une
Socket ?

Merci d'avance pour votre aide,
Olivier



Au niveau des octets, il n'y a jamais de problèmes d'encodage. C'est
seulement pour les Strings, lors de la transformation entre String et
octets.

Les problèmes d'encodage entre Strings surviennent en général lorsque deux
machines communiquent, et qu'elles n'ont pas le même encodage par défaut.
Pour qu'une communication de String fonctionne, il faut qu'il y ait le même
encodage, pour le traitement concerné, entre les deux machines.

Lors du passage de String en octets et vice versa, il y a toujours un moyen
de préciser l'encodage.

Par exemple, pour String -> octets : String.getBytes(String charsetName),
et, pour octets -> String : new String(byte[] bytes, String charsetName).

Bonne chance.


OK, merci pour ces précisions et ces exemples concrets :)

En fait je n'aurais pas du parler de String, car au départ les données
sont le résultat d'un cryptage, donc elles sont d'abord stockées dans
un tableau d'entiers puis dans une chaine hexadécimale puis dans une
transcription en chaine de caractères. Mais pour éviter les problèmes
d'encodage, je peux très bien zapper l'étape "chaine de caractère", et
donc du coup j'ai juste besoin d'envoyer un tableau de byte ou
d'entiers (0-255) sur ma Socket.
Je vais retourner voir du côté de DataOutputStream ...

@+
Olivier

--
Olivier Ligny
Créateur web free-lance / www.cyber-tamtam.net


Avatar
O.L.
Hervé AGNOUX a exposé le 27/10/2005 :
O.L. wrote:

Bonjour,

Je veux transmettre par une Socket des octets tout bêtes, qui ont 256
valeurs possibles. A l'origine ils sont stockés dans une String.
J'ai essayé par plein de moyen (OutputStream.write(),
PrintWriter.write() ...) mais à chaque fois à l'arrivée j'ai des
erreurs dans ma transmission, à savoir que 2 octets sur 30 ne sont pas
les bons.
A l'arrivée j'ai aussi essayé plusieurs méthodes de lecture, mais
aucune n'a fonctionné correctement.

Comment faire pour envoyer et réceptionner des octets simples dans une
Socket ?

Merci d'avance pour votre aide,
Olivier



Au niveau des octets, il n'y a jamais de problèmes d'encodage. C'est
seulement pour les Strings, lors de la transformation entre String et
octets.

Les problèmes d'encodage entre Strings surviennent en général lorsque deux
machines communiquent, et qu'elles n'ont pas le même encodage par défaut.
Pour qu'une communication de String fonctionne, il faut qu'il y ait le même
encodage, pour le traitement concerné, entre les deux machines.

Lors du passage de String en octets et vice versa, il y a toujours un moyen
de préciser l'encodage.

Par exemple, pour String -> octets : String.getBytes(String charsetName),
et, pour octets -> String : new String(byte[] bytes, String charsetName).

Bonne chance.


Aaahhh ! Victoire : j'ai réussi, ça marche.
J'ai utilisé DataOutputStream.writeChar(int) et
DataInputStream.readChar(), mais pour arriver ensuite à trouver la
bonne combinaison pour convertir un nombre en un bout de String, dur
dur ! Je suis passé par un tableau d'entiers, et par une fonction de
conversion int[] => String qui était incluse dans le script de
cryptage.

Bonne continuation à tous !
Olivier

--
Olivier Ligny
Créateur web free-lance / www.cyber-tamtam.net