我正在嘗試創建一個簡單的庫(希望與全世界共享),它允許通過telnet發送和接收遠程設備的命令。Telnet基本IO操作
我試圖保持代碼儘可能簡單,它已經工作,但我似乎無法理解輸入流如何工作;
我正在單獨閱讀每一行,通常輸入應停止在輸入「用戶名:」之後,我應該鍵入我的用戶名。
實際發生的事情是,在檢測到我已收到此行併發送響應之後,它已經太晚了(已收到新輸入)。 是否知道telnet會話如何實際工作以及如何接收最後的命令(在遠程設備之後等待)?
import java.util.*;
import java.io.*;
import java.net.*;
public class telnet {
public static void main(String[] args){
try{
//socket and buffer allocation
Scanner scan = new Scanner (System.in);
Socket socket = null;
PrintWriter out;
BufferedReader in;
String input; // temp input
String input1="";
String buff = ""; // holds all the input
//socket and IO initialization
socket = new Socket("10.10.10.2", 23);
out = new PrintWriter(socket.getOutputStream(),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int i=0;
int j=0;
while(true){
input = in.readLine(); //printout given line
System.out.println("line "+i+":\n"+input);
if (input.contains("Username")){ //if reading 'username' send response
System.out.println("!got Username");
out.println("user");
continue;
}
if (input1.contentEquals(input)){ //if input is the same wait once then send ENTER
if (j==0){
System.out.println("!read same line. wait for new");
i++; j++;
continue;
}
else{
System.out.println("!no new line. sending ENTER");
out.println("\r");
i++;j=0;
}
} else {j=0;}
input1=""; //copy input to temp string to check if same line or new
input1.concat(input);
i++;
if (i==20) break;
}
//CLOSE
out.close();
in.close();
socket.close();
} catch(IOException e){}
}
}