Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2654 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  DatagramPacket et DatagramSocket

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DatagramPacket et DatagramSocket

n°298705
Cherrytree
cn=?
Posté le 01-02-2003 à 11:15:30  profilanswer
 

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
mood
Publicité
Posté le 01-02-2003 à 11:15:30  profilanswer
 

n°298868
Cherrytree
cn=?
Posté le 01-02-2003 à 15:35:16  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  DatagramPacket et DatagramSocket

 

Sujets relatifs
Plus de sujets relatifs à : DatagramPacket et DatagramSocket


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)