управление удаленной консолью Java с помощью cmd - PullRequest
1 голос
/ 21 октября 2011

У меня есть консольное приложение Java, которым я хочу управлять с другого компьютера.Я использую класс Socket для отправки данных через сеть и конвейер для соединения удаленно управляемой программы с программой Sender и Reader, как показано:

Reader:

import java.io.*;
import java.net.*;
  public class Reader {
  //reads information from the remote controlled program
  public static void main(String[] args) throws Exception {
    Socket s = new Socket(args[0], Integer.parseInt(args[1]));
    PrintWriter bw = new PrintWriter(s.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String vstup;
    do {
        vstup = in.readLine();
        if(vstup==null) break;
        bw.println(vstup);
    } while(true);
    s.close();
  }
}

Отправитель:

import java.io.*;
import java.net.*;
public class Sender {
  //sends instruction to the remote controlled program
  public static void main(String[] args) throws Exception {
    Socket s = new Socket(args[0], Integer.parseInt(args[1]));
    BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String vstup;
    do {
        vstup = in.readLine();
        if(vstup==null) break;
        System.out.println(vstup);
    } while(true);
    s.close();
  }
}

RemoteController:

import java.net.*;
import java.io.*;
public class RemoteController {
  public static void main(String[] main) throws IOException {
    ServerSocket ss = new ServerSocket(Integer.parseInt(main[0]));

    System.out.println("Done, please connect the program.");
    Socket reader = ss.accept(); //reads what the program says
    System.out.println("reader connected");
    Socket writer = ss.accept(); //writes into the program
    System.out.println("writer connected");

    BufferedReader read = new BufferedReader(new InputStreamReader(reader.getInputStream()));
    PrintWriter write = new PrintWriter(writer.getOutputStream(), true);

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    for(int i = 0; i<5; i++) {
        write.println(br.readLine());
        System.out.println(read.readLine());
    }

    write.close();
    read.close();
    writer.close();
    reader.close();
    ss.close();
  }
}

Теперь я запускаю удаленный контроллер, а затем пишу

java Sender localhost 1234 | java SomeProgram | java Reader localhost 1234

в командную строку для проверки всякий раз, когда он работает.Иногда это работает, иногда нет, есть какие-либо советы, как заставить его работать каждый раз?

1 Ответ

0 голосов
/ 23 октября 2011

Вся проблема заключалась в том, что программы Sender и Reader подключались к основной программе в произвольном порядке, поэтому добавление Thread.sleep (200) решило мою проблему, извините за раздражение.PS: Если вы программируете на Java (и CMD), попробуйте, мне действительно весело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...