private byte[] sendCommand (byte[] command){
try {
nos.write(command);
nos.flush();
byte[] buffer = new byte[4096];
int read;
while ((read = nis.read(buffer, 0, 4096)) > 0 && isConnecting) {
// Read the response
temp_data = new byte[read];
System.arraycopy(buffer, 0, temp_data, 0, read);
}
Ich rufe sendCommand dreimal in meinem doInBackground(). Ich erwarte 13 Bytes Antwort nach dem Senden eines ersten Befehls, dann ein Byte in meinem zweiten und dann etwa 1kB in meinem dritten.asynctask lesen blockieren
Frage 1: Der erste Aufruf von sendCommand() liest 13 Bytes als Antwort, aber die gelesenen Blöcke in der while-Bedingung, weil es keine Daten mehr gibt. Wie kann ich es ohne Blockierung laufen lassen?
Frage 2: Ist es möglich, wiederholtes Schreiben und Lesen in einem Thread zu senden? Da für den zweiten Aufruf von sendCommand(), bekomme ich das gleiche 13 Byte nicht 1 Byte Antwort. Ich frage mich, ob der Ausgabestrom den Befehl nicht korrekt sendet.
Ich kann keine Logik in Ihrer Leseschleife sehen, die dazu führen würde, dass sie beendet wird. Ist das Ihr tatsächlicher Code oder haben Sie ihn bearbeitet? – teppic
Es ist mein tatsächlicher Code. Es wird beendet, wenn der Wert -1 ist. In der ersten while-Schleife wird 13 gelesen und wenn es das zweite Mal umgeht, wird es für einige Zeit blockiert und dann mit -1 beendet – juysw