DatagramPacket & DatagramSocket recupération des données

DatagramPacket & DatagramSocket recupération des données - Java - Programmation

Marsh Posté le 17-06-2006 à 12:39:27    

Bonjour,
j'ai une application Serveur qui recoit un flux de données en UDP. Jusque là, pas de problème ou du moins tant que les données arrive pas trop vite.
je m'explique:
une machine envoie les données 1;2;3;4;5 sur ~1 milisecondes (connection ethernet 10 mb half)
J'ai controlé avec ethreal, les données arrive correctement.
le problème, c'est que mon programme réagit comme s'il avait reçu 5 paquets, mais ils contienent tous les même data  :ouch:  
donc en affichant ce que je recois, j'ai les data 5;5;5;5;5
 
voici le code:

Code :
  1. private int DGRAM_BUF_LEN = 512;
  2.     private Vector monTamponData = new Vector();
  3.     private Vector monTamponIP = new Vector();
  4.     public void run(){
  5.     DatagramSocket socket = null;
  6.     try {
  7.      socket = new DatagramSocket(InPort);
  8.     } catch (SocketException e) {
  9.      e.printStackTrace();
  10.      System.exit(3);
  11.     }
  12.  try {
  13.   byte[] buf = new byte[DGRAM_BUF_LEN];
  14.   DatagramPacket packet = new DatagramPacket(buf, buf.length);
  15.   while (true) {
  16.    packet = new DatagramPacket(buf, buf.length);
  17.    socket.receive(packet);  //wait for data
  18.    monTamponData.add(packet.getData());
  19.    monTamponIP.add(packet.getAddress());
  20.   }
  21.  } catch(IOException e) {
  22.   e.printStackTrace();
  23.  }
  24.     }


 
J'ai essayé d'utiliser un vector comme tampon en me disant que cela permeterai une écriture plus rapide, mais rien a faire..
Quelqu'un a une idée ?

Reply

Marsh Posté le 17-06-2006 à 12:39:27   

Reply

Marsh Posté le 17-06-2006 à 14:21:17    

Bon, voila, j'ai trouvé le problème et la solution qui va avec. Je sais pas si c'est ce qu'on peux faire de mieux, mais ça marche.
Pour commencer, apparement, l'addresse mémoire de packet, bien qu'un new soit fait, reste la meme. Ce qui veux dire que quand je lis les données, je lis uniquement les dernière donnée inserées d'ou l'affichace de 5;5;5;5;5.
La solution que j'ai emploiée est simplement de stocker les valeurs sous forme de String. En faisant ça, je force le système a stocker les valeurs dans une nouvelle plage mémoire -> pas de réécriture des données.
 
donc a la place de  
 
monTamponData.add(packet.getData());
monTamponIP.add(packet.getAddress());
 
je met :
 
monTamponData.add(new String(packet.getData(), 0, packet.getLength()));
monTamponIP.add(new String(packet.getAddress().toString()));
 
Aller, bonne journée
@+

Reply

Sujets relatifs:

Leave a Replay

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