Warum erzeugt mein benannterPipe keine Ausgabe in Java?Java

Java-Forum
Anonymous
 Warum erzeugt mein benannterPipe keine Ausgabe in Java?

Post by Anonymous »

Ich versuche, in Java eine benannte Pipe unter Fenstern zu erstellen.

Code: Select all

final String pipeName = "\\\\.\\pipe\\test" ;
WinNT.HANDLE hNamedPipe = Kernel32.INSTANCE.CreateNamedPipe(pipeName,
WinBase.PIPE_ACCESS_DUPLEX,        // dwOpenMode
WinBase.PIPE_TYPE_MESSAGE | WinBase.PIPE_READMODE_MESSAGE | WinBase.PIPE_WAIT,    // dwPipeMode
1,    // nMaxInstances,
MAX_BUFFER_SIZE,    // nOutBufferSize,
MAX_BUFFER_SIZE,    // nInBufferSize,
(int) TimeUnit.SECONDS.toMillis(30L),    // nDefaultTimeOut,
null // lpSecurityAttributes
);
logger.info("Await client connection");
Kernel32.INSTANCE.ConnectNamedPipe(hNamedPipe, null);
logger.info("Client connected");
String testmessage = "Test Message";
IntByReference lpNumberOfBytesWritten = new IntByReference(0);
Kernel32.INSTANCE.WriteFile(hNamedPipe, testmessage.getBytes(), testmessage.getBytes().length, lpNumberOfBytesWritten, null);
logger.info("Echoed client data - length=" + lpNumberOfBytesWritten.getValue());
Kernel32.INSTANCE.FlushFileBuffers(hNamedPipe);
< /code>
Mit einem zweiten Programm möchte ich als Client eine Verbindung herstellen und den Inhalt lesen.void testReceive() throws Exception {
String pipeName = "\\\\.\\pipe\\test";
try (RandomAccessFile reader = new RandomAccessFile(pipeName, "r")) {
System.out.println("Waiting for Named Pipe...");

String line;
while ((line = reader.readLine()) != null) {
System.out.println("Received: " + line);
}
}
}
< /code>
Das Problem, mit dem ich ausgesetzt bin, ist, dass das zweite Programm die Nachricht nur empfängt, wenn das Handle im ersten Abschluss geschlossen ist.$pipeServer = [System.IO.Pipes.NamedPipeServerStream]::new("test", [System.IO.Pipes.PipeDirection]::InOut, 1)
$pipeServer.WaitForConnection()
$reader = New-Object System.IO.StreamReader($pipeServer)
$writer = New-Object System.IO.StreamWriter($pipeServer)
$writer.AutoFlush = $true
$writer.WriteLine("TestMessage")
while ($true) {
$reader.ReadLine() #block
}
Hat jemand eine Idee, was ich möglicherweise falsch mache?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post