在同一网络上不同计算机上运行的进程之间进行通信的推荐方式

Posted

技术标签:

【中文标题】在同一网络上不同计算机上运行的进程之间进行通信的推荐方式【英文标题】:Recommended way to communicate between processes running on different computers on the same network 【发布时间】:2010-03-10 03:50:57 【问题描述】:

我正在研究应该(希望)成为 .NET 软件解决方案的一个小功能,它允许一个应用程序报告在同一网络上的多台计算机上运行的另一个应用程序的多个实例的状态。

我查看了this MSDN article on named pipes,并设置了一个运行良好的简单客户端/服务器项目。然而,这只是 同一台 计算机上运行的两个进程(因此对于NamedPipeClientStream 构造函数,我将“.”作为serverName 参数传递)。尝试在同一网络上的单独台机器上运行相同的项目导致客户端进程失败,报告找不到网络路径。

这可能肯定只是我从客户端进程中将错误的字符串作为serverName 传递的问题。 (我尝试了 IP 地址以及我相信机器的网络名称,但也许我的格式错误。)无论如何,一些帮助让客户端/服务器 IPC 在不同的机器上工作在同一个网络上将不胜感激。 (我也在问这个问题,因为我什至不知道使用命名管道是否是最合乎逻辑的解决方案。)

【问题讨论】:

【参考方案1】:

命名管道可以工作,但如果所有计算机不在同一个域中,则让它工作很棘手。

当然,另一种选择就是使用套接字。使用套接字并不比使用命名管道复杂多少。

最后,如果所有应用程序都是 .NET,那么 WCF 也是一种选择。这里的主要好处是您不必担心无线协议,它只是一系列方法调用。尽管 WCF 确实在安全性和配置方面增加了一些开销。

【讨论】:

@codeka:哇,你提到跨域的管道很棘手,这让我大开眼界;我确实试图从两个不同的域中使用它们。我在同一域中的两台计算机上又试了一次,效果很好。更重要的是,您对 WCF(所有应用程序确实都在 .NET 中)的建议非常有帮助。我现在正在调查。 WCF 不支持机器外通信的命名管道【参考方案2】:

MailSlots 是另一种可能适合您的替代方案,它允许将消息广播到目标机器或本地网络。

我有一个封装在 C# 库中的开源实现,可能会有所帮助。它使用 MailSlot 实现进行网络传播,但也回退到 WM_COPYDATA windows 消息或 iostreams 以便将消息分派到单个机器上的所有进程。这绕过了只有一个进程可以读取 MailSlot 消息的限制。

http://thecodeking.github.com/XDMessaging.Net/

【讨论】:

以上是关于在同一网络上不同计算机上运行的进程之间进行通信的推荐方式的主要内容,如果未能解决你的问题,请参考以下文章

在单个管理程序虚拟机上的两个不同操作系统上运行的两个进程之间的 IPC

创建一个仅限本地的端口以在同一台计算机上的进程之间进行通信?

在不同计算机上的进程之间进行通信

套接字通信

IPC 中 LPCRPC 的区别和联系

python成长之路第九篇:网络编程