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();
Это может быть проблема с вашим кодом.