是否有可能通过远程方法调用将linux中的c++程序与作为服务器的c#程序进行通信?

本文关键字:程序 服务器 通信 远程方法调用 linux 是否 c++ 中的 有可能 | 更新日期: 2023-09-27 18:14:28

是否可以使用RMI实现在linux操作系统中运行的c++程序(客户端程序)与Windows操作系统中运行的c#程序(服务器程序)之间实现客户端/服务器通信?谁能提出任何可能的方法……欢迎任何有用的参考

是否有可能通过远程方法调用将linux中的c++程序与作为服务器的c#程序进行通信?

您需要遵循Google Protobuf的路线。它也可以在c++和c#中使用。

来自MSDN的类似回答

无论你是从java、c++还是c#发送数据,当它发送时,它都不重要在网络上只有1和0。关键是你怎么做在客户端/服务器端。所以,要确保你的数据Receive对应于你所拥有的(你想要的)结构反序列化)。

有时候你需要手动把比特和字节放在一起才能得到一切都解决了。然而,有一种东西叫做"Protobuff"。这可以帮助你得到你发送的数据的共同结构,谷歌一下,看看相关资料。

您可以使用套接字实现客户端服务器,并使用protobuf进行序列化/反序列化。(MSDN链接可能有助于解决)

我认为消息传递库将最适合于此。以ZMQ为例;它们对这里的许多语言都有绑定你可能有一种语言的事件分派器和另一种语言的监听器。还可以看看apache thrift

CORBA是一种IPC机制,它将提供您正在寻找的RPC机制。

这是一个描述c#服务器和JAVA客户端之间通信的链接。

http://iiop-net.sourceforge.net/dnAdderRmiClient.html

在我以前工作过的一家公司,它被用来在客户机/服务器模型中用于c++和java程序之间的通信。

他们使用了ACE/TAO库的组合。

http://www.cs.wustl.edu/~schmidt/TAO.html

我建议您在客户端和服务器之间使用远程方法调用而不是。在20世纪90年代,我们曾经认为RMI是一个好主意,但从那时起,我们已经意识到有更好的方法来实现计算机之间的通信。

最流行的方式是使用Web服务,而最简单的Web服务风格是RESTful Web服务。(去查一下。)这样做的好处是完全不关心客户端的运行时环境是否看起来像服务器的运行时环境,就像你的设置一样,你的客户端是Linux上的c++,而你的服务器是Windows上的c#。

Mozilla的XPCOM可能是您的桥梁。还有PyXPCOM。实际上,最简单的方法是使用一个中间的VBox。因此,您可以在linux机器上运行一个VBox实例(运行Windows),然后使用VBox API(来自c++)在VBox中发出命令。最后是

Linux & lt;——xpCom> VBox & lt; Windows - COM ->

在网络上工作时,重要的是协议,而不是客户端/服务器。

在电信中,通信协议是一种规则系统,它允许通信系统中的两个或多个实体通过物理量的任何类型的变化来传输信息。这些规则或标准定义了通信的语法、语义和同步以及可能的错误恢复方法

来源强调是我的

因此,为了通信你的c++客户端和c#服务器,你需要选择或定义将用于通信的协议。

您的协议可以构建在另一个协议之上。例如,您可以将HTTP用于传输目的,并定义协议来描述HTTP请求和响应主体中的消息应该使用什么语法。这将对您有所帮助,因为有许多现成的HTTP通信解决方案。

实际上,无论如何,您将基于另一个协议构建您的协议。HTTP本身构建在TCP之上。您需要选择是低级协议还是高级协议。它们各有利弊。

但是您必须自己处理客户机和服务器之间的消息传递。

作为替代方案,您可以使用一些远程过程调用(或RPC)解决方案:

远程过程调用(RPC)是一种进程间通信,它允许计算机程序使子例程或过程在另一个地址空间(通常在共享网络上的另一台计算机上)执行,而无需程序员明确地为这种远程交互编码细节。

所以这意味着你只需要遵循如何构建客户端和服务器的指导方针,所有的通信将被隐藏,看起来就像只是调用对象的方法。

<<p> 来源/em>

以下是可能的RPC解决方案的简短列表:

    使用DCOM的组件对象模型。Wiki: COM、DCOM。Msdn: com, dcom .简单对象访问协议。Wiki。
  • Windows通信基础。Wiki。MSDN。SO(感谢Sanju提供链接)。

总结:

您的客户端和服务器位于不同的环境中,并且使用不同的平台开发,这不是问题。您只需要使用您自己的基于某种协议的消息传递系统或某种RPC系统在它们之间构建通信。

我们可以编写一个c#程序来监听来自特定端口的消息,并编写另一个c++客户端程序来向该端口写入消息。