2010-09-08 6 views
0

Je cours le tcpdump sur mon émulateur android et comme le tcpdump fonctionne en arrière-plan il n'y a pas de données dans le tampon et donc l'application est bloquée à ce stade. ici est la partie du code:tampon de sortie vide jusqu'à tcpdump est tué

else if (tcpdumpButton.isChecked()) 
      { 
       try 
       { 
       Process process1 = Runtime.getRuntime().exec("tcpdump"); 
       DataOutputStream os = new DataOutputStream(process1.getOutputStream()); 
       BufferedReader osRes = new BufferedReader(new InputStreamReader(process1.getInputStream())); 
       //ByteArrayInputStream osRes = (ByteArrayInputStream) process1.getInputStream(); 
       // os.writeBytes("tcpdump -l port 80"); 
       os.flush(); 
       StringBuffer output = new StringBuffer(); 
       try 
       { 
        while ((osRes.readLine()) != null) 
        { 
         output.append(osRes.readLine()); 
         output.append("\n"); 
        } 
       } 
       catch (Exception e) 
       { 
        throw e; 
       } 
       process1.waitFor(); 
       tv.setText(output); 
       setContentView(tv); 
       } 
       catch (Exception e) 
       { 
       throw e; 
       } 

d'aide?

+0

Vous démarrez un sous-processus 'tcpdump'. Qu'est-ce qui le fait se terminer? – erickson

+0

Je ne veux pas qu'il se termine car je veux capturer tous les paquets de données – Jony

Répondre

1

Votre logique de code n'est pas bonne, car "BufferedInputStream.readLine()" est une méthode de blocage. Donc, dans votre code, vous ne sortez jamais de la boucle while. Ainsi, vous n'atteignez jamais la ligne "tv.setText (output);" Après avoir lu une ligne du processus, vous devez imprimer le tampon (et le nettoyer), dans la boucle while si vous ne voulez jamais fermer le flux ou fermer le processus.

Questions connexes