这个问题与我在 Java-C# 通信中提出的一个更早的、更一般的问题有关,但我认为它可能足够具体,可以单独提出(如果您认为我错了,请告诉我 - 我没有将那个标记为已回答但是,一旦我找出最有效的解决方案,就会回到它,这个问题是朝着那个方向迈出的一步......)。
我正在尝试使用命名管道在 C# 和 Java 之间进行通信。我的代码基于示例(由我之前问题的响应者指出)在 - http://v01ver-howto.blogspot.co.uk/2010/04/howto-use-named-pipes-to-通信.html
博客示例工作正常,但是因为在我自己的代码中我希望在我的 Java 程序连接到 C# 实例化管道时发生回调,所以我必须使用异步管道(博客中的示例没有这样做)。所以在实例化管道时,我的代码是 -
instructionPipe = new NamedPipeServerStream("InstructionPipe", PipeDirection.InOut, 4,PipeTransmissionMode.Byte,PipeOptions.Asynchronous);
instructionPipe.BeginWaitForConnection(new AsyncCallback(instructionPipeServerConnected), new Object());
..然后我写了一个回调,称为指令PipeServerConnected,做我想要的东西得到一个连接。
在 Java 端,再次按照博客中的示例,我在 Java 端设置了管道,方法是:
instructionPipeJava=new RandomAccessFile("\\\\.\\pipe\\" + "InstructionPipe","rw");
但是,如果我尝试在 Java 中将一些测试数据写入此管道 -
instructionPipeJava.write("This Is Test Text".getBytes());
并运行代码,然后代码停止并且无法越过这一行。如果我不使用异步管道,那么“instructionPipeJava”将能够将此文本写入管道就好了。但是我需要使用异步管道在 c# 端使用回调。
有没有人有什么建议?也许问题是我正在使用“new RandomAccessFile(..)”在 Java 中创建管道,并且有更合适的方法来连接到异步 C# 管道?