Подтвердить что ты не робот

Как открыть Windows named pipe из Java?

В нашей системе Linux мы используем именованные каналы для межпроцессного обмена (производитель и потребитель).

Чтобы проверить код потребителя (Java), я хотел бы реализовать (на Java) фиктивный продюсер, который записывает именованный канал, который подключен к потребителю.

Теперь тест должен также работать в среде разработки Windows. Таким образом, я хотел бы знать, как создать именованный канал в Windows с Java. В Linux я могу использовать mkfifo (называемый с помощью Runtime.exec()), но как это сделать в Windows?

4b9b3361

Ответ 1

Использовать именованные каналы для обмена данными между Java и .NET-процессами

Соответствующая часть в ссылке

try {
  // Connect to the pipe
  RandomAccessFile pipe = new RandomAccessFile("\\\\.\\pipe\\testpipe", "rw");
  String echoText = "Hello word\n";
  // write to pipe
  pipe.write ( echoText.getBytes() );
  // read response
  String echoResponse = pipe.readLine();
  System.out.println("Response: " + echoResponse );
  pipe.close();
} catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}

Ответ 2

В окнах названные каналы существуют, но они не могут быть созданы как файлы в записываемой файловой системе и нет инструмента командной строки. Они живут в специальной файловой системе и могут быть созданы только с помощью Win32 API.

Похоже, вам придётся использовать собственный код или переключиться с каналов на сокеты для IPC - вероятно, лучшее долгосрочное решение, поскольку оно гораздо более портативное.

Ответ 3

Вполне возможно читать и писать на существующий именованный канал в Java. Вы не можете, насколько мне известно, создать именованный канал в среде Windows. Linux - это другая история, поскольку именованные каналы могут быть созданы и использованы как файлы.

Соответствующая ссылка на взаимодействие с существующим каналом: http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

Ответ 4

возможно, может использовать именованные каналы cygwin - если все ваши процессы - cygwin.