Member 12133830 Ответов: 0

Отвечая на не могу записать ввод в stdin в командной строке хотя я могу на eclipse


Я написал программу серверно-клиентской модели на java, и она отлично работает на eclipse. Однако, когда я пытаюсь запустить клиент через командную строку (в Windows 10), я вижу ввод, который я набираю на клавиатуре для stdin, только после нажатия клавиши enter. Почему это так, и как я могу решить эту проблему?
Вот клиентский код (не самый лучший, я знаю):

public class MyEchoClient {
    public static void main(String[] args) throws IOException{
        Socket clientSocket = null; // the connection socket
        PrintWriter out = null;
        BufferedReader in = null;
        String host = args[0], msg, tmp;
        int port = Integer.decode(args[1]).intValue(), len;
        System.out.println("Connecting to " + host + ":" + port);

        try {  // Trying to connect to a socket and initialize an output stream
            clientSocket = new Socket(host, port); // host and port
            out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "UTF-8"), true);
        } catch (UnknownHostException e) {
              System.out.println("Unknown host: " + host);
              System.exit(1);
        } catch (IOException e) {
            System.out.println("Couldn't get output to " + host + " connection");
            System.exit(1);
        }

        try { // Initialize an input stream
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(),"UTF-8"));
        } catch (IOException e) {
            System.out.println("Couldn't get input to " + host + " connection");
            System.exit(1);
        }

        System.out.println("Connected to server!");

        BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in));
        try{
            while(true){
                while(!userIn.ready()){
                    if (in.ready()){ // if server has something to write, when client does'nt have something to write
                        tmp=in.readLine();
                        len=tmp.length();
                        System.out.print(tmp);
                        if ((len>0 && tmp.charAt(tmp.length()-1)=='>') ||  tmp.contains("UNIDENTIFIED"))
                            System.out.println();
                    }
                }
                System.out.println();
                msg = userIn.readLine();
                if (msg==null) { break; }
                out.println(msg);
                tmp=in.readLine();
                if (tmp.contains("~")) { break; }
                System.out.println(tmp);
            }
        }
        catch(IOException e){ System.out.println("Error with server connection."); }
        System.out.println("Exiting...");
        out.close();
        in.close();
        userIn.close();
        clientSocket.close();
    }
}


Что я уже пробовал:

Я попытался найти замену функции ready (), потому что думаю, что именно это вызывает проблемы. Но я не нашел эквивалентной функции, которая работает...

0 Ответов