나는 어떤 방향이 필요합니다. 내가 올바른 길을 가고 있는지 잘 모르겠지만 그렇게 생각합니다. 클라이언트 시스템에 연결하고 단일 명령을 실행 한 후 연결을 끊는 텔넷 java 프로그램을 작성하려고합니다. 나는 작동하도록 프로그램을 가져올 수 있고 InputStream을 텍스트 필드 (테스트 용)로 읽을 때 리눅스 머신이나 라우터에 연결할 수있다. 그러나 Windows 컴퓨터 나 다른 클라이언트 컴퓨터에 연결하면 작동하지 않습니다. 임의의 문자를 읽은 다음 잠급니다.텔넷 Java 소켓 테스트
아래 코드는 제 코드입니다. 아파치의 API뿐만 아니라 다른 코드의 예도 보았습니다. Java 소켓만으로이 작업을 수행 할 수 있는지 확인하고 싶습니다.
public class TestSockets extends JFrame implements ActionListener {
/**
* @param args
*/
private String USER = "User";
private String PASS = "Password01";
private final static String CMD = "exit\r\n";
private static Socket telnet = null;
private PrintWriter writer = null;
private static InputStream reader = null;
private String host = "192.168.1.1";
private int port = 23;
TextArea javatext;
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestSockets().setVisible(true);
}
private TestSockets() {
super("Testing Buttons");
//Set JFrame size
setSize(500, 600);
//Gives JFrame a location
setLocation(100, 100);
//set layout
setLayout(new FlowLayout());
javatext = new TextArea(25, 65);
add(javatext);
//Ask for window decorations provided by the look and feel.
JFrame.setDefaultLookAndFeelDecorated(true);
JButton button3 = new JButton("Run Program");
button3.addActionListener(this);
add(button3);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
try {
telnet = new Socket(host, port);
telnet.setKeepAlive(true);
//reader = telnet.getInputStream();
writer = new PrintWriter(telnet.getOutputStream());
reader = telnet.getInputStream();
//out = telnet.getOutputStream();
//Process p = Runtime.getRuntime().exec("telnet " + server.toString(), null, null);
//DataOutputStream os = new DataOutputStream(p.getOutputStream());
//DataInputStream in = new DataInputStream(p.getInputStream());
StringBuilder sb = new StringBuilder();
byte[] buffer = new byte[4096]; // Read 4K characters at a time
int len; // How many chars read each time
while ((len = reader.read(buffer)) != -1) {
String readchar = new String(buffer, 0, len);
sb.append(readchar + "\n");
System.out.println(readchar);
javatext.append(readchar);
if (readchar.endsWith("login: ")) {
writer.print(USER + "\r\n");
writer.flush();
}
if (readchar.endsWith("Password: ")) {
writer.print(PASS + "\r\n");
writer.flush();
}
if (readchar.endsWith("password: ")) {
writer.print(PASS + "\r\n");
writer.flush();
}
if (readchar.endsWith("# ")) {
writer.print(CMD);
writer.flush();
}
if (readchar.endsWith("# ")) {
writer.print(CMD);
writer.flush();
}
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
실제로 얻은 결과가 실제로 불량 데이터라는 것을 어떻게 알 수 있습니까? 어떤 종류의 인증 데이터가있을 수 있습니다. 출력물을 제공해 주시겠습니까? 또한 무엇을 시도 했습니까? –
내가 읽은 것으로부터, 당신 말이 맞습니다. 그것은 인증 데이터 일뿐입니다. 내 문제는 Windows 상자에 연결하려고 할 때 더 이상 나아지지 않는다는 것입니다. 이 프로그램은 리눅스와 라우터에서 잘 작동합니다. – itgeek25