是否有可能通过远程方法调用将linux中的c++程序与作为服务器的c#程序进行通信?
Is it possible that we could communicate C++ program in linux to a C# program acting as server using Remote Method Invocation?
是否可以使用RMI实现在linux操作系统中运行的c++程序(客户端程序)与Windows操作系统中运行的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++客户端程序来向该端口写入消息。
- 使用嵌入式猫鼬服务器托管应用程序
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 为什么io_context在我的boost asio协同程序服务器中丢失
- VS-2019程序在某些服务器上的第一条浮点指令上崩溃
- ESP-CoAP 服务器调用资源处理程序,不接收包
- 使用C++创建UDP服务器以嵌入跨平台iOS和Android应用程序中
- 客户端发送消息,但服务器在客户端结束程序之前不接收消息
- C++启动另一个程序(客户端-服务器)的程序
- 我正在编写一个简单的客户端套接字应用程序,但在连接后服务器收到一个空缓冲区
- 自动启动网络服务器和程序
- C++客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- C++服务器/客户端聊天程序
- 如何对上传程序服务器进行速率限制以节省内存
- MongoDB C++驱动程序服务器端查询计数
- 为什么在应用程序服务器项目中使用多种语言
- 如何设置C++web应用程序服务器侦听来自tomcat/restlet服务器的http请求
- 当远程桌面会话注销时,如何阻止DLL终止应用程序服务器
- -客户端-服务器应用程序-服务器端的recv()可以正常工作,但客户端的recv()会阻塞程序