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);
}
私はdoInBackground()でsendCommandを3回呼び出します。 私は最初のコマンドを送信した後で13バイトの応答を期待し、次に2番目のコマンドで1バイト、次に3番目のコマンドで1kBを期待します。asynctask読み取りブロック
質問1:sendCommand()への最初の呼び出しは応答で13バイトを読み取りますが、データがなくなったためにwhile条件の読み取りブロックが読み取られます。私はそれをブロックせずに動かすことができますか?
質問2:1つのスレッドで繰り返し書き込みと読み取りを行うことはできますか? 2回目のsendCommand()呼び出しでは、同じ13バイトが1バイトの応答ではないためです。 outputstreamがコマンドを適切に送信していないのだろうかと思います。
読み取りループ内に、それが終了する原因となるロジックが表示されません。これはあなたの実際のコードですか、それとも編集しましたか? – teppic
これは私の実際のコードです。 readが-1のときに終了します。最初のwhileループでは13回読み込み、2回目のブロックではしばらくブロックしてから-1で終了します – juysw