java telnet套接字:BufferedReader/BufferedWriter

java telnet套接字:BufferedReader/BufferedWriter,java,jakarta-ee,bufferedreader,Java,Jakarta Ee,Bufferedreader,我的服务器在23999上打开一个telnet端口,当我给出telnet localhost 23999时,它显示如下: < BP-SAS ==> bplin19 !>telnet 0 23999 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. Please enter password to authenticate: (here i give password for example abc123)

我的服务器在23999上打开一个telnet端口,当我给出
telnet localhost 23999
时,它显示如下:

< BP-SAS ==> bplin19 !>telnet 0 23999
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
Please enter password to authenticate:
(here i give password for example abc123)   
Enter 'help' at any point to get a listing of all registered commands...
BAS> log set-info 1 ( commad i have entered and it does somthing )
这不起作用。事实上,我有点困惑我应该采取什么方法。读者和作者之间非常困惑


请提供帮助。

只需获取一次套接字输入流和输出流(在while循环之外执行此操作)。试着这样做:

Socket soc = new Socket("192.168.9.7",23999);
//create buffered writer
BufferedReader bwin = new BufferedReader(new InputStreamReader(soc.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
while (true) {
        String readFir = bwin.readLine();
        if (readFir == nul) break;
        System.out.println(readFir);
        if(readFir.startsWith("Please")){
            System.out.println("Password Entered");
            bw.write("abc123");
            bw.newLine();
            // instead might have to explicitly write "\r\n"
            // depending platform you're connecting from.
            bw.flush();
        }
        else if(readFir.startsWith("Enter")){
            System.out.println("Enter command");
            bw.write("log set-info 1");
            bw.newLine();
            bw.flush();
            bw.close();  //close buffered Writer
            break;
        } else System.out.println("Skip: " + readFir);
  }

要访问Telnet协议,您最好使用库(如),而不是自己使用。

您尝试过单个OutputStreamWriter吗?当您关闭第一个BufferedWriter(bw)时,您正在关闭套接字输出流。同样,当您执行此命令时,写入stdout的内容是什么?@Jason-SocketClosed异常位于readFir=bwin.readLine();line执行后,我得到:请输入密码以进行身份验证:输入密码(在此行等待readFir=bwin.readLine();)用于调试add-else以打印任何意外输入。使用您的代码,我还观察到一件事。我的服务器正在像这样读取密码。。。reader=新的BufferedReader(新的InputStreamReader(in));密码=reader.readLine();//这里它挂起了,它无法读取密码。(如果我执行bw.write(“abc123”);bw.flush();bw.close();那么它可以读取密码…想知道为什么???)可能需要在密码后输入换行符。是的…添加换行符后..它运行良好。我有两个问题:1)为什么需要换行符。2) 在这种情况下,bwin.readLine();将返回null。
Socket soc = new Socket("192.168.9.7",23999);
//create buffered writer
BufferedReader bwin = new BufferedReader(new InputStreamReader(soc.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
while (true) {
        String readFir = bwin.readLine();
        if (readFir == nul) break;
        System.out.println(readFir);
        if(readFir.startsWith("Please")){
            System.out.println("Password Entered");
            bw.write("abc123");
            bw.newLine();
            // instead might have to explicitly write "\r\n"
            // depending platform you're connecting from.
            bw.flush();
        }
        else if(readFir.startsWith("Enter")){
            System.out.println("Enter command");
            bw.write("log set-info 1");
            bw.newLine();
            bw.flush();
            bw.close();  //close buffered Writer
            break;
        } else System.out.println("Skip: " + readFir);
  }