簡體   English   中英

如何從Java打開Windows命名管道?

[英]How to open a Windows named pipe from Java?

在我們的Linux系統中,我們使用命名管道進行進程間通信(生產者和消費者)。

為了測試使用者(Java)代碼,我想實現(在Java中)一個虛擬生成器,它寫入連接到使用者的命名管道。

現在,測試也應該在Windows開發環境中運行。 因此,我想知道如何在Java中從Windows創建命名管道。 在Linux中,我可以使用mkfifo(使用Runtime.exec()調用),但是我應該如何在Windows上執行此操作?

使用命名管道在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();
}

在Windows中, 存在命名管道,但它們不能在可寫文件系統中創建為文件 ,也沒有命令行工具。 它們位於特殊的文件系統中,只能使用Win32 API創建。

看起來你將不得不求助於本機代碼,或者從管道切換到IPC的套接字 - 可能是最好的長期解決方案,因為它更便攜。

您可以使用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

JNA包裝器的API與Win32相同,因此您將能夠在Windows上使用命名管道的所有功能和強大功能。

可以在Java中讀取和寫入現有的命名管道。 據我所知,您無法在Windows環境中創建命名管道。 Linux是一個不同的故事,因為可以像文件一樣創建和使用命名管道。

與現有管道交互的相關鏈接: http//v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

也許可以使用cygwin命名管道 - 如果你的所有進程都是cygwin。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM