Java простой клиент Telnet с использованием сокетов - PullRequest
6 голосов
/ 19 июня 2011

Я много чего прочитал по теме, как 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("1234\r\n"); // also tried simply \n or \r
//w.flush();
//Thread.sleep(1000);

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

w.print("1234\r\n");
//Thread.sleep(1000);

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

socket.close();

1 Ответ

10 голосов
/ 19 июня 2011

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

Также на этом сайте написаноследующее:

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

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

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

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

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

...