同一台机器上的两个程序相互通信的最佳方式是啥

Posted

技术标签:

【中文标题】同一台机器上的两个程序相互通信的最佳方式是啥【英文标题】:What is the best way for two programs on the same machine to communicate with each other同一台机器上的两个程序相互通信的最佳方式是什么 【发布时间】:2009-12-04 17:53:31 【问题描述】:

我需要将一些数据(整数)从一个 (C++) 程序传递到另一个 (C#)。最快的方法是什么?

P.S.:操作系统:Windows XP

【问题讨论】:

答案在 Windows 上可能与基于 Unix 的不同,并且 C# 在 Windows 以外的操作系统上运行良好。你为什么不指定你的操作系统? 【参考方案1】:

鉴于您同时使用 C++ 和 C#,并且它在同一个系统上,我个人对此的偏好是使用 Pipes。

它们在native code (C++) 以及通过NamedPipeClientStream 和NamedPipeServerStream 的C# 中运行良好。

但是,Interprocess Communication 还有其他选项,其中任何一个都可以。

【讨论】:

我认为您的意思是命名管道,而不是管道。管道和命名管道是不同的 IPC 机制。 管道包括命名管道和匿名管道。从技术上讲,如果一个进程正在启动另一个进程,您可以使用匿名管道,否则,您需要命名管道。不过,从技术上讲,两者都是“管道”。来自 MS:“有两种类型的管道......”,请参阅:msdn.microsoft.com/en-us/library/aa365137(VS.85).aspx【参考方案2】:

共享内存将是最快的,但命名管道也非常快且更易于使用。

【讨论】:

【参考方案3】:

查看this article 了解可用选项的概要。您最好的选择可能是pipe。

【讨论】:

请将“tinyurl”地址替换为实际地址。 我就不和你吵架了……哈哈抱歉 @cic:搞定了。抱歉 - 它包含括号,打乱了格式,而且我还没有记住转义码。【参考方案4】:

使用文件是最简单的方法。如果您需要速度,那么网络套接字可能是一个不错的选择。

【讨论】:

邮槽基本上是一个文件,但只能用于单向通信。【参考方案5】:

如果您的通信是单向的并且您的消息很小,则可以使用邮槽。否则,我建议使用命名管道(正如其他人所建议的那样)。

mailslots 上有些东西

All IPC mechanisms

【讨论】:

【参考方案6】:

以防万一它有帮助,如果这不是关键的进程间通信(如果你需要的功能可以被塑造成一个 DLL 两者都使用或类似的)你可以使用公共语言运行时进行互操作性。

【讨论】:

【参考方案7】:

我的建议是 Sockets 或 RPC。我不熟悉管道,但它似乎也是一个流行的选择。

【讨论】:

以上是关于同一台机器上的两个程序相互通信的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

在同一台机器上的 .NET 应用程序之间复制对象的最佳方式是啥? [关闭]

在两个应用程序之间进行通信的最佳和最快方式是啥?

在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥

linux 进程间通信方式

同一解决方案中两个 ASP.NET Core 项目之间的通信

让两个 .net 应用程序相互通信的最轻量级的方式是啥?