2010-03-22 2 views
0

J'essaie de recevoir des données de tableau d'octets à partir d'une machine. Il envoie 3 différents types de structure de données chacun avec un nombre différent de champs qui consistent principalement en int et quelques flottants, et des tailles d'octets, le premier étant 320 octets, 420 pour le second type et 560 pour le troisième. Lorsque le programme d'envoi est lancé, il déclenche simultanément les 3 types de données avec un intervalle de 1 seconde. Exemple:Besoin d'aide pour la réception de données ByteArray

Envoi commande: Pack1 - 320 octets 1 s plus tard Pack 2 - 420 octets 1 s plus tard Pack3 - 560 octets 1 s plus tard Pack1 - 320 octets ... .. .

Comment puis-je vérifier la taille des octets entrant avant de passer à:

byte[] handsize = new byte[bytesize]; 

que les données que je reçois sont tous hors d'usage, par exemple en utilisant ce qui suit la lecture tout int:

System.out.println("Reading data in int format:" + " " + datainput.readInt()); 

Je reçois beaucoup de différents ensembles de valeurs chaque fois que je lance mon prog bien qu'avec quelques données de terrain valides mais elles sont partout.

Je ne suis pas sûr de savoir comment exactement dois-je le faire, mais j'ai essayé ce qui suit et apparemment mes champs de données ne sont pas recevoir en séquence correcte:

BufferedInputStream bais = new 

BufferedInputStream(requestSocket.getInputStream()); 

DataInputStream datainput = new DataInputStream(bais); 

byte[] handsize = new byte[560]; 

datainput.readFully(handsize); 


int n = 0; 

int intByte[] = new int[140]; 

for (int i = 0; i < 140 ; i++) { 

System.out.println("Reading data in int format:" + " " + datainput.readInt()); 

intByte[n] = datainput.readInt(); 
    n = n + 1; 
    System.out.println("The value in array is:" + intByte[0]); 
     System.out.println("The value in array is:" + intByte[1]); 
     System.out.println("The value in array is:" + intByte[2]); 
      System.out.println("The value in array is:" + intByte[3]); 

également du code ci-dessus, l'ordre du valeurs imprimées avec

System.out.println("Reading data in int format:" + " " + datainput.readInt()); 

et

System.out.println("The value in array is:" + intByte[0]); 
System.out.println("The value in array is:" + intByte[1]); 

sont différents.

Toute aide sera appréciée. Merci

Répondre

1

vous ne pouvez pas. vous devez envoyer explicitement la longueur de données (ou le type de données dont vous dériverez la longueur) avant les données, ou avoir une autre méthode pour regarder les données et déterminer leur longueur (auto-description, comme une chaîne terminée par un caractère nul).

éditer: Une autre façon de comprendre la longueur est de mettre un seul message dans une seule session TCP. pas recommandé car c'est trop frais mais ça va marcher.

0

Vous appelez datainput.readInt() deux fois dans chaque itération de la boucle. Vous avez probablement voulu lire seulement un int dans chaque itération.