Как открыть именованный канал Windows из Java? - PullRequest
26 голосов
/ 11 марта 2009

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

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

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

Ответы [ 5 ]

24 голосов
/ 09 апреля 2010

Использование именованных каналов для связи между процессами 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();
}
8 голосов
/ 11 марта 2009

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

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

4 голосов
/ 08 января 2018

Вы можете создать именованный канал, используя библиотеку JNA https://github.com/java-native-access/jna

Это ясно показано в следующем тесте: https://github.com/java-native-access/jna/blob/master/contrib/platform/test/com/sun/jna/platform/win32/Kernel32NamedPipeTest.java

API оболочки JNA такой же, как Win32, поэтому вы сможете использовать все функции и возможности именованных каналов в Windows.

1 голос
/ 20 марта 2013

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

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

0 голосов
/ 16 июня 2011

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

...