2016-08-19 2 views
1

У меня есть сервер, который отправляет большую строку. Я хочу прекратить читать, когда увижу этот заключительный разделитель.Сканер Android Скачайте до разделителя (UseLimiter)

Android:

protected Void doInBackground(Void... arg0) { 


    Socket socket = null; 

    try { 
     socket = new Socket(dstAddress, dstPort); 

     Scanner r = new Scanner(new InputStreamReader(socket.getInputStream())); 

     while (true) { 


      //MASTER 
      valores[0] = r.nextLine(); 
      valores[1] = r.nextLine(); 
      valores[2] = r.nextLine(); 
      valores[3] = r.nextLine(); 
      valores[4] = r.nextLine(); 
      valores[5] = r.nextLine(); 
      valores[6] = r.nextLine(); 
      valores[7] = r.nextLine(); 
      valores[8] = r.nextLine(); 
      valores[9] = r.nextLine(); 
      valores[10] = r.nextLine(); 
      valores[11] = r.nextLine(); 
      valores[12] = r.nextLine(); 

      //SLAVE 
      valores[13] = r.nextLine(); 
      valores[14] = r.nextLine(); 
      valores[15] = r.nextLine(); 
      valores[16] = r.nextLine(); 
      valores[17] = r.nextLine(); 
      valores[18] = r.nextLine(); 
      valores[19] = r.nextLine(); 
      valores[20] = r.nextLine(); 
      valores[21] = r.nextLine(); 
      valores[22] = r.nextLine(); 
      valores[23] = r.nextLine(); 
      valores[24] = r.nextLine(); 
      valores[25] = r.nextLine(); 

      r.useDelimiter("\\zfish"); 
      while (r.hasNext()) { 
       valores[26] = r.next(); 
      } 

      publishProgress(valores[0], valores[1], valores[2], valores[3], valores[4], valores[5], valores[6], valores[7], valores[8], valores[9], valores[10], valores[11], valores[12], 
        valores[13], valores[14], valores[15], valores[16], valores[17], valores[18], valores[19], valores[20], valores[21], valores[22], valores[23], valores[24], valores[25], valores[26]); 
     } 

    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } finally { 
     if (socket != null) { 
      try { 
       socket.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

    return null; 

} 

сервер C#

  string conetado, bateria, tensao, altitude, roll, pitch, yaw, velx, vely, velz, estado, atual, desejado; 
      string conetado2, bateria2, tensao2, altitude2, roll2, pitch2, yaw2, velx2, vely2, velz2, estado2, atual2, desejado2; 

      conetado = master.sconetado; 
      bateria = master.sbateria; 
      tensao = master.stensao; 
      altitude = master.saltitude; 
      roll = master.sroll; 
      pitch = master.spitch; 
      yaw = master.syaw; 
      velx = master.svelx; 
      vely = master.svely; 
      velz = master.svelz; 
      estado = master.sestado; 
      atual = master.satual; 
      desejado = master.sdesejado; 


      conetado2 = slave.sconetado; 
      bateria2 = slave.sbateria; 
      tensao2 = slave.stensao; 
      altitude2 = slave.saltitude; 
      roll2 = slave.sroll; 
      pitch2 = slave.spitch; 
      yaw2 = slave.syaw; 
      velx2 = slave.svelx; 
      vely2 = slave.svely; 
      velz2 = slave.svelz; 
      estado2 = slave.sestado; 
      atual2 = slave.satual; 
      desejado2 = slave.sdesejado; 

      string_master_frame = Convert.ToBase64String(sendBytes); 

      data = conetado + "\n" + bateria + "\n" + tensao + "\n" + altitude + "\n" + roll + "\n" + pitch + "\n" + yaw + "\n" + velx + "\n" + vely + "\n" + velz + "\n" + estado + "\n" + atual + "\n" + desejado + "\n" + 
         conetado2 + "\n" + bateria2 + "\n" + tensao2 + "\n" + altitude2 + "\n" + roll2 + "\n" + pitch2 + "\n" + yaw2 + "\n" + velx2 + "\n" + vely2 + "\n" + velz2 + "\n" + estado2 + "\n" + atual2 + "\n" + desejado2 + "\n" + string_master_frame + "fish"; 

      send(data) 

Мой Android код не работает. он застрял на значении = r.next(); Никогда не покидайте эту линию. Таким образом, это означает, что он не ищет рыбу

ответ

1

Не вызывайте r.useDelimiter() снова и снова в цикле! Также как вы выходите из своей петли, если она установлена ​​в true ?!

Scanner r = new Scanner(new InputStreamReader(socket.getInputStream())); 
    r.useDelimiter("\\s*fish\\s*"); // to find " fish " with space 

    while (r.hasNext()) { 
     value = r.next(); 
    } 
    r.close(); // very important 
+0

Я отредактирую свой код с полным кодом. –

+0

отредактирован. Почему я не могу использовать цикл while? Таким образом, вы всегда читаете и обновляете TextViews? Зачем мне нужно закрывать соединение каждый раз, когда я читаю? –

+0

Вы должны вырваться из петли где-то, поэтому она застряла, как вы говорите. В противном случае он будет работать бесконечно! –

Смежные вопросы