首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >BufferedReader接受终端输入字符

BufferedReader接受终端输入字符
EN

Stack Overflow用户
提问于 2018-09-13 03:53:43
回答 1查看 43关注 0票数 0

我正在用Java语言实现套接字编程,在那里我使用BufferedReader从客户端获取输入。但是,BufferedReader对象接受在控制台上输入的换行符。下面是我的服务器端代码:

代码语言:javascript
复制
import java.net.*;
import java.io.*;

class FTPserver {

private ServerSocket serverSocket = null;
private DataInputStream dis = null;
private DataOutputStream dos = null;

FTPserver() {
    try {
        String input;
        serverSocket = new ServerSocket(3000);
        Socket socket = null;
        socket = serverSocket.accept();
        dis = new DataInputStream(socket.getInputStream());
        dos = new DataOutputStream(socket.getOutputStream());
        input = dis.readUTF();
        if(input.equals("ftp")) {
            dos.writeUTF("ftp> ");
            input = dis.readUTF();
            System.out.print("opened connection to 10.10.10.212");
            dos.writeUTF("Connected to 10.10.10.212\n220 (vsFTPd 3.0.2)\nName (10.10.10.212:root): ");
            input = dis.readUTF();
            dos.writeUTF("331 Please specify the password.\nPassword: ");
            input = dis.readUTF();
            dos.writeUTF("230 Login successful.\nRemote system type is UNIX\nUse binary mode to transfer files\nftp> ");
            input = dis.readUTF();       //receive mget
            dos.writeUTF("ftp> ");
            input = dis.readUTF();       //receive mput
            dos.writeUTF("ftp> ");
            //input = dis.readUTF();
            input = dis.readUTF();       //receive exit
            dos.writeUTF("Goodbye");
            input = dis.readUTF();       //receive exit
            dos.writeUTF("Goodbye");
        }
        dis.close();
        dos.close();
        socket.close();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    FTPserver ftp = new FTPserver();
}
}

下面是我的客户端代码:

代码语言:javascript
复制
import java.net.*;
import java.io.*;
import java.util.Scanner;

class FTPclient {
private DataInputStream dis = null;
private DataOutputStream dos = null;
private Socket socket = null;

FTPclient() {
    try {
        String input,output;
        BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
        socket = new Socket("localhost",3000);
        dis = new DataInputStream(socket.getInputStream());
        dos = new DataOutputStream(socket.getOutputStream());
        output = sc.readLine();
        dos.writeUTF(output);               // write ftp
        System.out.print(dis.readUTF());    // print ftp>
        dos.writeUTF(sc.readLine());            // write open 10.10.10.212
        System.out.print(dis.readUTF());    // print connected
        dos.writeUTF(sc.readLine());
        System.out.print(dis.readUTF());
        dos.writeUTF(sc.readLine());             //send mget
        System.out.print(dis.readUTF());

        dos.writeUTF(sc.readLine());             //send mput
        System.out.print(dis.readUTF());
        dos.writeUTF(sc.readLine());            //send exit
        System.out.println(dis.readUTF());
        dos.writeUTF(sc.readLine());             //send exit
        System.out.println(dis.readUTF());
        dis.close();
        dos.close();
        socket.close();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    FTPclient ftp = new FTPclient();
}
}

以下是我在客户端控制台上提供的输入:

代码语言:javascript
复制
dell@dell-Inspiron-15-3567:~$ java FTPclient
ftp
ftp> open 10.10.10.212
Connected to 10.10.10.212
220 (vsFTPd 3.0.2)
Name (10.10.10.212:root): student
331 Please specify the password.
Password: student
230 Login successful.
Remote system type is UNIX
Use binary mode to transfer files
ftp> mget *.py
ftp> mput sample.java
ftp>                   //this line is getting skipped
exit
Goodbye
dell@dell-Inspiron-15-3567:~$

正如在上面的控制台片段中提到的,用户将输入exit的行将被跳过。根据stackoverflow的回答,我的输入应该以一个终止字符结束。我不知道该怎么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 04:37:11

我假设您所说的“跳过”是指单词“exit”打印在下面的行中,而不是像前面的行中那样直接在"ftp>“之后打印。如果是这样,我认为发生这种情况的原因是因为您在客户端的这些行中使用的是System.out.println,而不是前面的行中的System.out.print。我认为您的输入正在正确终止,因为您的程序似乎正在正确地结束,而不是继续等待进一步的输入。

代码语言:javascript
复制
    dos.writeUTF(sc.readLine());            //send exit
    System.out.println(dis.readUTF());
    dos.writeUTF(sc.readLine());             //send exit
    System.out.println(dis.readUTF());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52302486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档