是否可以在Linux OS中运行的C ++程序(客户端程序)与使用RMI实现在Windows中运行的C#程序(服务器程序)之间实现客户端/服务器通信?有人可以建议任何可能的方式......欢迎任何有用的参考
答案 0 :(得分:8)
您需要遵循Google Protobuf的路线。它也适用于C ++和C#。
来自MSDN
的类似答案如果从java,c ++或c#发送数据,则无关紧要 在网络上它只是1和0。这是你做的事情 在客户端/服务器端使用它。所以,请确保您的数据 接收对应于您拥有的结构(您想要的结果) 反序列化到)。
有时您需要手动将位和字节放在一起才能得到 一切顺利。然而,有一种叫做“Protobuff”的东西 这可以帮助您获得您发送的数据的通用结构, 谷歌并阅读所有相关信息。
您可以使用套接字实现客户端服务器,并使用protobuf对其进行序列化/反序列化。 (MSDN链接可能有助于解决方案)
答案 1 :(得分:2)
我认为消息传递库最适合这个。比如看ZMQ;他们对找到的许多语言都有约束力here 所以你可以让你的事件调度员用一种语言和另一种语言的听众。另请查看apache thrift
答案 2 :(得分:2)
CORBA是一种IPC机制,它将提供您正在寻找的RPC机制。
这是一个描述C#服务器和JAVA客户端之间通信的链接。
http://iiop-net.sourceforge.net/dnAdderRmiClient.html
在我之前工作的一家公司,它用于客户端/服务器模型中的c ++和java程序之间的通信。
他们使用了ACE / TAO库的组合。
答案 3 :(得分:2)
我建议你 不 使用远程方法调用来进行客户端和服务器之间的通信。在20世纪90年代,我们曾经相信RMI是一个好主意,但从那时起我们就意识到计算机之间有更好的通信方式。
最流行的方法是使用Web服务,最简单的Web服务是RESTful Web服务。 (查找它们。)这样做的好处是不关心客户端的运行时环境是否与服务器的运行时环境类似,就像您的设置一样,您的客户端是Linux上的C ++和您的服务器是Windows上的C#。
答案 4 :(得分:1)
在网络上工作时,协议重要的是什么,而不是客户端/服务器。
在电信领域,通信协议是规则系统,允许通信系统的两个或更多实体通过物理数量的任何变化来传输信息。 这些是定义通信的语法,语义和同步以及可能的错误恢复方法的规则或标准。
Source重点是我的。
因此,为了与C ++客户端和C#服务器进行通信,您需要选择或定义将用于通信的协议。
您的协议可以在其他协议之上构建。例如,您可以使用HTTP进行传输,并定义协议,描述HTTP请求和响应主体中的消息应使用的语法。这对您有所帮助,因为有许多现成的HTTP通信解决方案。
实际上,无论如何你都会基于另一个构建你的协议。 HTTP本身构建在TCP之上。您需要选择是低级别还是高级别协议。他们都有自己的优点和缺点。
但是你必须自己处理客户端和服务器之间的消息传递。
作为替代方案,您可以使用一些远程过程调用(或RPC)解决方案:
远程过程调用(RPC)是一种进程间通信,它允许计算机程序使子例程或过程在另一个地址空间(通常在共享网络上的另一台计算机上)上执行,而无需程序员明确编写详细信息这种远程互动。
这意味着您只需遵循如何构建客户端和服务器的指导原则,所有通信都将被隐藏,并且看起来就像调用对象的方法。
以下是可能的RPC解决方案的简短列表:
包装起来:
您的客户端和服务器位于不同的环境中并使用不同的平台开发并不是问题。您只需使用基于某种协议的自己的消息传递系统或某些RPC系统在它们之间建立通信。
答案 5 :(得分:1)
Mozilla的XPCOM可能是你的桥梁。还有PyXPCOM。实际上,尽管最简单的方法是拥有一个中间的VBox。因此,您在Linux机器上运行VBox实例(运行Windows),然后使用VBox API(来自C ++)在VBox中发出命令。所以你最终得到了
Linux< - xpCom - > VBox< -COM->视窗
答案 6 :(得分:1)
我们可以编写一个C#程序来监听来自特定端口的消息,并编写另一个C ++客户端程序来将消息写入该端口。因此我们可以同时传达这两个应用程序。