我已经阅读了很多关于这个主题的内容,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();
答案 0 :(得分:10)
如果没有针对您的特定路由器进行测试,很难知道您的示例有什么问题。使用库可能是个好主意,例如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中,而是在末尾运行显式flush():
Writer w = new OutputStreamWriter(s.getOutputStream());
w.print(command+"\r\n");
w.flush();
这可能实际上是您的代码的问题。