java простой клиент telnet с использованием сокетов

Я прочитал много вещей по теме, как telnet-это протокол, а не простое соединение сокетов, ожидание символов новой строки, использование внешних библиотек и еще много чего...

суть в том, что мне нужно быстрое и грязное приложение Java telnet, не обязательно масштабируемое и не обязательно красивое, поэтому я пытаюсь избежать использования библиотек, вызовов системных функций и тому подобного. Я пытался и тестировал и до сих пор, при попытке войти в систему маршрутизатор (через telnet конечно) у меня есть... ничего.

вот фрагмент кода, который я использовал до сих пор, пожалуйста, кто-нибудь укажет мне в правильном направлении, потому что я не знаю, что еще я должен попробовать, потому что я уверен, что это должно быть что-то очень простое и глупое, что я пропустил. Заранее спасибо!

Socket socket = new Socket("192.168.1.1", 23);
socket.setKeepAlive(true);
BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter w = new PrintWriter(socket.getOutputStream(),true);

int c=0;
while ((c = r.read()) != -1)
    System.out.print((char)c);

w.print("1234rn"); // also tried simply n or r
//w.flush();
//Thread.sleep(1000);

while ((c = r.read()) != -1)
    System.out.print((char)c);

w.print("1234rn");
//Thread.sleep(1000);

while ((c = r.read()) != -1)
    System.out.print((char)c);

socket.close();

1 ответов


трудно понять, что не так с вашим примером без тестирования против вашего конкретного маршрутизатора. Было бы неплохо использовать библиотеку, напримерhttp://sadun-util.sourceforge.net/telnet_library.html выглядит как простой в использовании.

также на этом сайте говорит следующее:

чтобы продолжить разговор, команда выдается просто отправив его на outputstream сокета (и используя последовательность новой строки telnet \r\n):

 String command="print hello"; 
 PrintWriter pw = new PrintWriter(
      new OutputStreamWriter(s.getOutputStream()), true);
 pw.print(command+"\r\n");

если сеанс кажется зависшим после входа в систему, избегайте обертывания StreamWriter в PrintWriter и вместо этого запустите явный flush () в конце:

 Writer w = new OutputStreamWriter(s.getOutputStream());
 w.print(command+"\r\n");
 w.flush();

Это может быть проблема с вашим кодом.