Plantons le décor :
Le tutorial Java, le code source du client, le code source du serveur #1 et #2.
Le programme est une applet qui se connecte à un serveur local et récupère de ce serveur une chaîne de caractère.
J'ai un problème avec ce programme. Plus particulièrement la méthode doIt().
Code :
- try {
- socket.receive(packet);
- } catch (IOException e) {
- e.printStackTrace();
- return;
- }
- String received = new String(packet.getData());
- display.setText(received);
|
Bon pour l'histoire, le serveur renvoit la date actuelle sous forme d'une chaine, introduite dans un buffer de grande taille (256).
La variable packet représente le datagramme envoyé, puis reçu. C'est dans ce deuxième cas que je me place. En effet, lorsque je fais :
Code :
- packet.getLength();
|
J'obtiens : 28. C'est bon.
En revanche lorsque je fais :
Code :
- String s = new String(packet.getData());
|
Je m'attends à obtenir une chaine faisant getLength() caractères. Mais ce n'est pas le cas. J'obtiens 256, soit la taille du buffer contenu dans packet. Et naturellement, si je fais :
Code :
- System.out.println(s);
|
ça fait n'importe quoi : ma date est au début, puis il y a complétion avec des caractères en forme de rectangle.
Que pensez-vous de cela ? D'abord, qu'est-ce que ça donne chez vous ? Est-ce un bug ? Est-ce un problème d'encodage ?
Message édité par Cherrytree le 01-02-2003 à 11:19:56