C # перенаправление стандартного ввода / ошибка - PullRequest
0 голосов
/ 23 июля 2011

Мое приложение используется для запуска процесса Java и управления им (перезапустите его в случае сбоя, предоставьте tcp-сервер для выдачи удаленных команд и т. Д.). С моим сервером RCON (удаленная консоль) все работает нормально. Однако когда я отправляю команду процессу Java, я хотел бы получить ответ (процесс Java на самом деле отвечает в StandardError вместо StandardOutput) и показать этот ответ обратно человеку, подключенному удаленно.

Моя проблема в том, что их входные данные отправляются через мою функцию RedirectedStandardInput. Как я могу убедиться, что получил правильный ответ от RedirectedStandardOutput?

Лучше всего было бы иметь какой-то глобальный флаг, который означает, что «команда RCON была отправлена, следующее сообщение, полученное с помощью стандартной ошибки, должно использоваться для ответа»? Я предполагаю, что моя главная проблема заключается в том, что Java-процесс, являющийся игрой, может использовать что-то вроде «Игрок присоединился к игре», а не как ответ на команду. Ответ на команду визуально мгновенный, но я не знаю, есть ли она или имеет небольшую задержку.

1 Ответ

0 голосов
/ 23 июля 2011

Это зависит от того, как реализовано приложение Java.Но если мы ничего не знаем об этом, мы должны предположить, что он может быть многопоточным.Но это означает, что между отправкой команды и ответом могут появляться сообщения, которые не являются ответами на ваши команды.

Если это так, у вас есть несколько решений:

  1. ЕслиВы знаете возможные сообщения, проанализируйте их, чтобы выяснить, является ли это ответом или сообщением, не связанным с ним.
  2. Если вы можете изменить приложение Java, измените его так, чтобы оно использовало какой-то лучший протокол для связи.1009 *
...