2017-07-17 4 views
0

J'ai besoin de lire les octets de données d'un serveur en utilisant la connexion Socket sur TCP. Les données sont sous la forme d'un flux d'octets délimité par délimité par un ou plusieurs octets avec une valeur de 255 (0xFF)Comment lire les données provenant de TCP Socket séparé par un délimiteur spécifique

J'utilise BufferedInputSream pour lire les données. Une partie de mon code est ci-dessous:

String messageString = ""; 
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); 
byte[] bytes = new byte[16 * 1024]; 
System.out.println("Receiving Bytes"); 
    while(true) 
    { 
    bytesRead = in.read(bytes); 
    messageString += new String(bytes,0,bytesRead); 
    if (<SOME CONDITION TO KNOW THAT DELIMITER IS RECEIVED>) 
     { 
     System.out.println("Message Received: " + messageString); 
     //Proceed to work with the message 
     messageString = ""; 
     } 
    } 

J'ai besoin de la condition IF pour que je sache que j'ai reçu un paquet de données et commencer à traiter les mêmes. Je ne connais pas la longueur du message que je vais recevoir ni l'information à la longueur dans le message entrant.

S'il vous plaît aidez-moi à lire ce type de données d'octets. Toute aide est vraiment appréciée.

Répondre

0

Si votre delimiter est de 255, vous pouvez simplement vérifier les données que vous venez de lire pour cette valeur:

bytesRead = in.read(bytes); 
int index= bytes.indexOf(255); 
if (index<0) 
{ 
    messageString += new String(bytes,0,bytesRead); 
} 
else //<SOME CONDITION TO KNOW THAT DELIMITER IS RECEIVED>) 
{ 
    messageString += new String(bytes,0,index); 
    System.out.println("Message Received: " + messageString); 
    //Proceed to work with the message 
    messageString = ""; 
}