用java处理linux终端应用
我想创建一个java程序来处理linux终端应用程序(sipp) 我可以通过以下方式使用bash启动此应用程序:用java处理linux终端应用,java,linux,bash,opensuse,Java,Linux,Bash,Opensuse,我想创建一个java程序来处理linux终端应用程序(sipp) 我可以通过以下方式使用bash启动此应用程序: proc = Runtime.getRuntime().exec("/bin/bash", null, wd); BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); OutputStream outputStream = proc.getOutputS
proc = Runtime.getRuntime().exec("/bin/bash", null, wd);
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
OutputStream outputStream = proc.getOutputStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(proc.getOutputStream());
BufferedWriter buffered = new BufferedWriter(outputStreamWriter);
PrintWriter printWriter = new PrintWriter(buffered, true);
printWriter.println("cd ../***/sipp/sipp-3.3/");
printWriter.println("./sipp -i "+Config.IP+" -sf uac.xml "+Config.IP+":5060");
默认情况下,sipp脚本每秒向服务器发送10个呼叫。如果在终端内启动此应用程序,则可以使用“/”*“-”+”增加或减少每秒的呼叫数
现在我想每秒有50个电话,所以我必须输入*四次。但是如果我使用
printWriter.println("*");
终端停止工作,等待命令关闭
因此,我尝试将*字符与输出流一起发送:
outputStream.write("*".getBytes());
outputStream.write("*".getBytes());
outputStream.write("*".getBytes());
outputStream.write("*".getBytes());
outputStream.flush();
刷新这些命令后,我可以在输出中看到每秒调用次数的增加。但在flush命令结束后,终端再次停止工作
我觉得换行有什么问题,因为当我发送
printWriter.print("*");
命令,什么也没发生
可能需要知道的是,sipp每秒更新一次终端,只允许输入pq/*-+和1-9,并且您无法看到您的输入,并且您的输入将直接执行
我希望有人能帮助我!
非常感谢 你真的在使用
outputStream.write(“*”.getBytes())
而不是outputStream.write('*')代码>?不管怎样,您也从其他流中读取数据吗?是的,我正在使用,outputStream.write(“*”.getBytes())代码>在另一个线程中,我一直在从输入流读取数据。我仍然没有得到您的问题描述:“在刷新这些命令后,我可以在输出中看到每秒调用数的增加。但是在刷新命令结束后,终端再次停止工作。”那么,您什么时候能看到预期效果,终端什么时候停止工作?两个线程同时打印?另一个线程会一直打印从BufferedReader到我的控制台的任何收入。在控制台中,我可以看到下一次打印时的呼叫速率是每秒10次呼叫,是每秒20次呼叫。。。直到每秒50个电话。然后终端完全停止工作。然后我从服务器上得到一些空行,就这样。因此,我认为当我调用outputStream.flush()时,终端停止了
同样非常奇怪的是,每次打印的总时间是0.00秒,并且没有呼叫服务器。当我不发送任何命令时,它可以正常工作,每秒调用10次。这没有任何意义,没有刷新
就不会传输任何数据。当您收到确认输入时,刷新已被完全处理。而问题恰恰是由你在冲水后所做的事情引起的。您的阅读代码也可能已损坏。