2017-07-17 1 views
0

Ich muss Bytes von Daten von einem Server lesen Socket-Verbindung über TCP. Die Daten haben die Form eines Byte-Streams, der durch ein oder mehrere Oktette mit einem Wert von 255 (0xFF) begrenzt ist.So lesen Sie Daten von TCP-Socket getrennt durch ein bestimmtes Delimeter

Ich verwende BufferedInputSream, um die Daten zu lesen. Ein Teil meiner Code ist unten:

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 = ""; 
     } 
    } 

ich die IF-Bedingung müssen, damit ich weiß, dass ich ein Datenpaket erhalten haben, und starten Sie die gleiche Verarbeitung. Ich weiß nicht die Länge der Nachricht, die ich erhalten werde, weder ich habe die Information auf die Länge in der eingehenden Nachricht.

Bitte helfen Sie mir diese Art von Byte-Daten zu lesen. Jede Hilfe wird wirklich geschätzt.

Antwort

0

Wenn Ihr Begrenzer 255 ist, können Sie nur die Daten überprüfen Sie nur für diesen Wert lesen:

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 = ""; 
} 
Verwandte Themen