我寫了一個「期望」類型的實現向路由器發送命令。增強telnet連接讀取輸入速度
我正在觀察的是,來自連接的輸入處理要慢得多。
我的代碼如下,
public static String expect(String expectString) {
try {
int c = 0;
while ((c = br.read()) != -1) {
expectBuffer.append((char) c);
System.out.print((char) c);
if (expectBuffer.toString().contains(expectString)) {
break;
}
}
String expBuff = expectBuffer.toString();
expectBuffer.setLength(0);
// System.out.println(expBuff);
return expBuff;
} catch (Exception e) {
return "";
}
}
public static void send(String cmd) {
pw.print(cmd + "\r");
pw.flush();
}
從main
,我稱他們爲像下面,
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);
expect("Login");
send("dinesh");
expect("Password");
send("stack");
expect(server + "#");
send("some command here");
expect(server + "#");
它需要很長時間來處理輸入和打印相同的安慰。
任何人都可以提供改進我的代碼的建議嗎?
在此先感謝。
當你使用一個不同的Telnet客戶端更快速地做路由器響應比你在代碼中看到包到達?除此之外,快速瀏覽一下,不要從緩衝區進行單字節讀取,通過讀取(byte [],offset,length)執行批量讀取 –
也對於sendIing,請確保啓用tcpnodelay。無關的建議。 –