Ich habe einen Fall, in dem der Server die Dateigröße zuerst und die Dateidaten sendet. Wie kann ich beim Lesen auf der Clientseite sowohl den Ganzzahlwert als auch die Dateidaten unterscheiden?Unterscheidung zwischen den Datenpaketen in TCP IP
Sameple Code für Server (os ist die BufferedOutputStream):
// Construct a 1K buffer to hold bytes on their way to the socket.
byte[] mybytearray = new byte[(int) myFile.length()];
//File Size
os.write((int) myFile.length());
FileInputStream fis = null;
System.out.println("test+sendbytes");
// Copy requested file into the socket's output stream.
try {
fis = new FileInputStream(myFile);
} catch (FileNotFoundException ex) {
// Do exception handling
}
BufferedInputStream bis = new BufferedInputStream(fis);
try {
bis.read(mybytearray, 0, mybytearray.length);
os.write(mybytearray, 0, mybytearray.length);
os.flush();
os.close();
os.close();
// File sent, exit the main method
return;
} catch (IOException ex) {
// Do exception handling
}
'os.write ((int) myFile.length())' ist * falsch * wie in Peter Lawreys Antwort darauf hingewiesen. Es schreibt ein einzelnes Byte mit dem Wert 'myFile.length() & 0xFF'. Außerdem ist der Aufruf von 'os.flush()' unmittelbar vor 'os.close()' unnötig. 'close()' löscht immer alle verbleibenden Daten in einer der Kern-IO-Klassen. –