我正在尝试通过期望的实现对路由器进行 telnet。
我的代码如下,socket通信如下,
server = "my-server-ip-domain-here";
socket = new Socket();
socket.connect(new InetSocketAddress(server, 23), 10000);//Will wait for 10 seconds
socket.setKeepAlive(true);
socket.setSoTimeout(10000);
expectBuffer = new StringBuilder();
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream(), true);
我的发送实现如下,
public static void send(String cmd) {
pw.print(cmd + "\r");
pw.flush();
}
我期望的实现如下,
public static String expect(String expectString) {
try {
int c = 0;
char[] buf = new char[4096];
//Here c will return the no. of chars read
while ((c = br.read(buf)) != -1) {
String tmp = "";
//converting that char array to String
for (int i = 0; i < c; i++) {
//Printing that character
System.out.print(buf[i]);
tmp += buf[i];
}
expectBuffer.append(tmp).append(NEW_LINE);
if (expectBuffer.toString().contains(expectString)) {
break;
}
}
String expBuff = expectBuffer.toString();
expectBuffer.setLength(0);
// System.out.println(expBuff);
return expBuff;
} catch (Exception e) {
System.out.println(e);
return "";
}
}
我面临的问题是没有。BufferedReader
每次读取的字符数。
即每次我必须向路由器发送一些命令并且这也被BufferedReader
.
例如。
send ("commandABC");
expect(prompt);
send ("command-efg");
expect(prompt);
send ("commandHij");
expect(prompt);
根据我发送的命令,它会显示一些输出。无论我发送什么,它也会被阅读,不幸的是,它是以单独的方式打印的。
如下所示。
com
mandABC
<command output here>
command-
efg
<command output here>
commandHij
<command output here>
正如我上面指出的,只有我发送的命令以单独的方式打印。
我检查了没有。当时读取char的,发现是2-10不等。
这就是它以这种方式打印的原因。
无论如何限制读取至少100个字符?
提前致谢。