2013-04-05 90 views
3

我有一个用C#编写的程序,它接收来自第三方服务器的数据并将其处理为一系列整数(它们正在快速流动)。该程序是用C#编写的,因为第三方提供了处理数据的类,但只在C#中提供。我想在Java程序中使用这些整数并以流方式使用它们(所以一旦它们由C#程序进行流式处理和处理,我想在Java程序中使用整数)。第二个程序是用Java编写的,因为另一个第三方只用Java提供它们的类(这是必需的)。所以我的猜测适合做什么属─从用C#编写的程序获取数据到Java程序

  1. 查找运行C#类在Java程序,然后包括直接处理输入数据到我的Java程序[这似乎并没有太多的C#类有希望 - 我似乎无法得到jni4net,这是在其他职位的建议,工作]

  • C#编写另一个程序保存到特定的内存位置正在处理的整数。编译程序。然后在Java源代码中运行可执行文件,并在Java代码中编写一些回调函数,当特定内存位置的整数发生变化时可以读取这些回调函数,并记录这些新数字是什么[不确定如何开始! ]
  • 有没有人有什么建议可能是最痛苦的方法?

    +1

    看看这个:http://stackoverflow.com/questions/14824491/can-i-communicate-between-java-and-c-sharp-using-just-sockets – 2013-04-05 16:55:15

    +0

    为什么你需要这样做?是否有某种需求超出了你的控制范围,迫使你使用两种不同的语言,或者这两种应用程序已经存在或多或少存在? – 2013-04-05 16:55:26

    +1

    只需在java和C#应用程序之间创建一个命名管道。听起来像你的情况最合适。在一般情况下只需查找“进程间通信”。程序之间有很多与语言无关的通信方式。 – Servy 2013-04-05 16:55:30

    回答

    3

    这听起来像你想要某种形式的进程间通信机制。

    因此,任何允许通信可以采用:

    1. 命名管道
    2. 套接字
    3. TCP连接
    4. 共享内存

    出的选项,我会建议命名管道,因为它们是最容易掌握的,并且没有端口不可用等问题。

    参见:How to open a Windows named pipe from Java?

    和:Using Named Pipes for IPC in C#

    这篇文章:Using Named Pipes to communicate between C# and Java描述并使用管道从两种环境的终端到终端的手段。

    0

    您可以将Java和C#程序合并为一个,并使用JNI桥接C#/ Java接口。 JNI基本上允许你从Java调用C#方法,反之亦然。我想这个代码同样很难作为套接字,再加上会有一些加速。

    此处了解详情:http://www.codeproject.com/Articles/245622/Using-the-Java-Native-Interface-in-Csharp

    +0

    这不仅比其他一些方法更难,但我认为它不是很好的设计。这里我们有两个需要沟通的逻辑上分离的程序。而不是让他们彼此了解,并以这种方式将他们紧密结合在一起,他们可以通过一些IPC方法通过操作系统进行通信,从而减少耦合。 – Servy 2013-04-05 17:06:53

    0

    我不得不这样做,在过去类似的东西,以获得从Java系统的数据导入Excel(通过RTD API),并结束了与套接字协议的方式去。

    如果你有一个非常简单的数据集(如上面提到的整数流),这应该是非常直接的 - 只需查看Java Socket和ServerSocket类的文档以及相应的C#Socket类。

    如果你最终得到一个更复杂的API和多条消息等,你可能想看看Google协议缓冲区,因为它们都有.Net和Java实现。