DatagramPacket et DatagramSocket

DatagramPacket et DatagramSocket - Java - Programmation

Marsh Posté le 01-02-2003 à 11:15:30    

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 :
  1. try {
  2.             socket.receive(packet);
  3.         } catch (IOException e) {
  4.             e.printStackTrace();
  5.             return;
  6.         }
  7.         String received = new String(packet.getData());
  8.         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 :
  1. packet.getLength();


 
J'obtiens : 28. C'est bon.
 
En revanche lorsque je fais :
 

Code :
  1. 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 :
  1. 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
Reply

Marsh Posté le 01-02-2003 à 11:15:30   

Reply

Marsh Posté le 01-02-2003 à 15:35:16    

Il semble que ce n'est pas une bug, mais comme le veut la tradition une feature. Le forum de JavaSoft a déjà reçu une question similaire. Il apparait que le code exact devrait être :
 

Code :
  1. String s = new String(packet.getData(), 0, packet.getLength());


 
C'est ce que j'avais fait, de toutes façons. Problème résolu donc, mais la question reste entière, d'autant que le tutorial Java est erroné.


---------------
Le site de ma maman
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed