输出缓冲区为空,直到tcpdump被终止

时间:2010-09-08 06:41:19

标签: java android

我在我的android模拟器上运行tcpdump,因为tcpdump在后台运行,缓冲区中没有任何数据,因此应用程序暂时停留。 这是代码的一部分:

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;
              }

任何帮助?

1 个答案:

答案 0 :(得分:1)

您的代码逻辑不好,因为“ BufferedInputStream.readLine()”是一种阻止方法。

因此,在您的代码中,您永远不会退出while循环。 所以,你永远不会到达“tv.setText(output);”

这一行

从流程中读取一行后,如果您不想关闭流或关闭流程,则应打印缓冲区(并清除它),在while循环内