T
Tersus
Gast
Grüßt euch,
wenn ihr mir helfen wollt, bitte den Beitrag nach dem Code gründlich lesen.^^ Lang ist er nicht. Vielen Dank schon mal dafür.
Ich übe mich derzeit an einem ganz simplen TCP-Server- und Client. Der Client sendet lediglich die Bytes {1, 2, 3, 4} an den offline Server, der diese Bytes zurück schicken soll. Mehr nicht.
Nun habe ich die Methode zum Lesen aus dem Socket-Inputstream ganz typisch und standardmäßig geschrieben. Findet man in jedem Tutorial.
TCP-Server:
Beim 1. Schleifendurchlauf ist, wie zu erwarten, n = 4, die Variable block = {1, 2, 3, 4}. Alles in Ordnung.
Schon beim 2. Schleifendurchlauf, n ist ja noch nicht nicht -1, hängt is.read(block). Es wird keine Exception geworfen und die while-Schleife läuft auch nicht weiter -> keine Endlosschleife.
Wie ist das zu erklären? Worauf wartet die Methode, um zu terminieren?
wenn ihr mir helfen wollt, bitte den Beitrag nach dem Code gründlich lesen.^^ Lang ist er nicht. Vielen Dank schon mal dafür.
Ich übe mich derzeit an einem ganz simplen TCP-Server- und Client. Der Client sendet lediglich die Bytes {1, 2, 3, 4} an den offline Server, der diese Bytes zurück schicken soll. Mehr nicht.
Nun habe ich die Methode zum Lesen aus dem Socket-Inputstream ganz typisch und standardmäßig geschrieben. Findet man in jedem Tutorial.
TCP-Server:
Code:
byte[] leseNachricht(java.net.Socket socket) throws IOException{
InputStream is = socket.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] block = new byte[256];
int n;
while( (n = is.read(block)) != -1 ){ // Hier hängt die Schleife beim zweiten Durchlauf
buffer.write(block, 0, n);
}
buffer.flush();
return buffer.toByteArray();
}
Beim 1. Schleifendurchlauf ist, wie zu erwarten, n = 4, die Variable block = {1, 2, 3, 4}. Alles in Ordnung.
Schon beim 2. Schleifendurchlauf, n ist ja noch nicht nicht -1, hängt is.read(block). Es wird keine Exception geworfen und die while-Schleife läuft auch nicht weiter -> keine Endlosschleife.
Wie ist das zu erklären? Worauf wartet die Methode, um zu terminieren?