Связь через стандартный ввод / вывод в Java - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь отправить сообщения между двумя JVM: сервер запускает второй процесс.Второй процесс заключается в отправке сообщения на сервер, который выводит сообщение на консоль.Код выглядит следующим образом:

public class Server
{
    public static void main(String[] args)
    {
        Process client=null;
        BufferedReader clientInput=null;

        try
        {
            client=Runtime.getRuntime().exec("java Client");
            clientInput=new BufferedReader(new InputStreamReader(client.getInputStream()));
        }
        catch(IOException e){}

        System.out.println("Waiting for the client to connect...");

        try
        {
            String msg=clientInput.readLine();
            System.out.println(msg);
        }
        catch(IOException e){}

        client.destroy();
    }
}

и

public class Client 
{
    public static void main(String[] args) 
    {   
        BufferedWriter out = new BufferedWriter( new OutputStreamWriter(System.out));

        try 
        {
            out.write("Ready\n");
            out.flush();
        } 
        catch (Exception e){}
    }
}

Если я запускаю это, я получаю в качестве вывода с сервера ноль.В конце концов, общение должно быть обоим.Любая помощь очень ценится.

РЕДАКТИРОВАТЬ: Я не получаю никаких ошибок (просто удалил операторы печати из блоков catch, чтобы сэкономить место).

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Я думаю, вам нужно добавить цикл while:

while ((s = in.readLine()) != null && s.length() != 0)
    System.out.println(s);
}
1 голос
/ 15 февраля 2012

Вы получаете ноль в конце потока. Клиент правильно запускается, отправляет сообщение Ready и заканчивается, поэтому поток заканчивается.

Совершенно правильное поведение. Если клиент завершит свою работу (но вместо этого сделает что-то еще, например, читает сообщения сервера по стандартному вводу данных), сервер никогда не получит нулевое значение.

Редактировать: НИКОГДА (!!!!!) делать это:

catch(IOException e){}

Хотя бы напиши:

catch(IOException e){ e.printStackTrace() }

Это покажет вам вашу ошибку!

В моей компании это одно из элементарных правил стиля кода!

...