开张了,先从改进做起。
实际telnet程序,执行完命令后,一般不是直接读取readUntil "#"或“$$”就能搞定的。
程序中有可能有其他打印,还有如下一些场景要考虑。
一般有成功的返回。 比如 end of execute fun
有找不到的返回。 比如 symbol not found
还有就是不返回,比如 设置变量 gVarAbc 1
对于telnet 中再嵌入telnet 场景:
实际上每输入一个shell命令,实际上2个telnet都会返回结果,并且不能保证哪个telnet再前面打印。
比如按照回车,看到shell是一个#,如果用程序读,则是2个#
对于login成功失败,是不能靠#的,必须区分成功与失败的模式,之后还有过滤多余的#。避免直接readUntil("#")
所以需要修订 成如下程序:
- public String readUntil(String strSucc,String strFail) {
- try {
- char lastChar = pattern.charAt(pattern.length() - 1);
- StringBuffer sb = new StringBuffer();
- char ch = (char) in.read();
- while (true) {
- sb.append(ch);
- if (ch == lastChar) {
- if (sb.toString().endsWith(strSucc)) { //找到成功的模式返回
- return sb.toString();
- }
- if(null !=strFail ) {
- if (sb.toString().endsWith(strFail)) { //找到失败的模式返回
- return sb.toString();
- }
- }
- }
- ch = (char) in.read();
- // System.out.print(ch);
- }
- } catch (Exception e) { 0
- e.printStackTrace();
- return sb.toString() ; //已经读空了,返回,给程序处理。
- }
- return null;
- }