我尝试在我的应用程序上实现 PING 命令。我这样做的方式是创建一个进程,然后执行命令。PING 命令完成后,我从控制台解析结果。
该方法工作正常。我的问题是当我尝试更改 PING 命令的间隔时间值时。PING 可以将一个值作为参数,该值定义了 2 个数据包发送之间的间隔。当我从我的应用程序执行该方法时,结果与使用终端仿真器执行的结果大不相同。
间隔值强调设备在更短的时间内发送更多数据包。我已将间隔值设置为 0.1 毫秒,并检查了两种情况的结果。该设备与终端仿真器配合使用,损耗为 1-2%。使用我的应用程序,结果显示损失了 70-80%。
对于 1ms 的间隔,结果是相同的。(设备没有压力)
从我所做的不同测试中,我意识到当在我的应用程序中调用 PING 方法时,设备会丢失很多数据包。
这怎么可能?我认为在进程中执行命令与从终端仿真器执行命令的结果相同。有什么想法吗?
我使用这里的代码从 android 程序运行 shell 命令
我知道 su 不是必需的....
public void runAsRoot(String[] cmds) throws Exception {
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
InputStream is = p.getInputStream();
for (String tmpCmd : cmds) {
os.writeBytes(tmpCmd+"\n");
int readed = 0;
byte[] buff = new byte[4096];
boolean cmdRequiresAnOutput = true;
if (cmdRequiresAnOutput) {
while( is.available() <= 0) {
try { Thread.sleep(5000); } catch(Exception ex) {}
}
while( is.available() > 0) {
readed = is.read(buff);
if ( readed <= 0 ) break;
String seg = new String(buff,0,readed);
result=seg; //result is a string to show in textview
}
}
}
os.writeBytes("exit\n");
os.flush();