titto.sebastian
titto.sebastian

Reputation: 531

Is it possible that we could communicate C++ program in linux to a C# program acting as server using Remote Method Invocation?

Is it possible to implement client/server communication between a C++ program (client program) running in linux OS with a C# program(server program) running in Windows using RMI implementation?Can anyone suggest any possible way...Any kind of helpful reference is welcome

Upvotes: 4

Views: 877

Answers (7)

titto.sebastian
titto.sebastian

Reputation: 531

We could just write a C# program to listen messages from a particular port and write another C++ client program to write message to that port.As thus we could communicate both application.

Upvotes: 1

CodingFeles
CodingFeles

Reputation: 384

When working over network it's protocol what matters, not the client/server.

In telecommunications, a communications protocol is a system of rules that allow two or more entities of a communications system to transmit information via any kind of variation of a physical quantity. These are the rules or standard that defines the syntax, semantics and synchronization of communication and possible error recovery methods.

Source Emphasis is mine.

So, in order to communicate your C++ client and C# server you need to choose or define protocol that will be used for communication.

Your protocol can be build above another protocol. For example, you can use HTTP for transportation purposes and define your protocol describing what syntax should be used for messages in HTTP requests and responses bodies. This will help you, because there're many ready-to-use solutions for HTTP communication.

Actually you will build your protocol based on another anyway. HTTP itself build above TCP. You'll need to choose whether it would be low level or high level protocols. They all have their pros and cons.

But you will have to deal with messaging between your client and server yourself.

As an alternative you can use some Remote Procedure Call(or RPC) solution:

Remote procedure call (RPC) is an inter-process communication that allows a computer program to cause a subroutine or procedure to execute in another address space (commonly on another computer on a shared network) without the programmer explicitly coding the details for this remote interaction.

So that means that you only have to follow guidelines how to build your client and server and all communication will be hidden and will look like as just calling object's method.

Source

Here's short list of possible RPC solutions:

  • Component Object Model with DCOM. Wiki: COM,DCOM. MSDN: COM, DCOM.
  • Simple Object Access Protocol. Wiki.
  • Windows Communication Foundation. Wiki. MSDN. SO(credits to Sanju for link).

To wrap it up:

It's not a problem that your client and server are in different environments and are developed using different platforms. You only have to build communications between them using either your own messaging system based on some protocol, or some RPC system.

Upvotes: 1

Dmitry Rubanovich
Dmitry Rubanovich

Reputation: 2627

Mozilla's XPCOM might be your bridge. There is also PyXPCOM. Realistically though the easiest way is to have an intermediate VBox. So you run a VBox instance (running Windows) on the linux machine and then use VBox API (from C++) to issue commands within VBox. So you end up with

Linux <--xpCom--> VBox <--COM--> Windows

Upvotes: 1

Mike Nakis
Mike Nakis

Reputation: 62045

I would recommend that you do not use remote method invocation for communication between a client and a server. In the nineteen-nineties we used to believe that RMI is a good idea, but since then we have realized that there are much better ways for communication between computers.

The most popular way is by using Web Services, and the easiest flavor of Web Services is RESTful Web Services. (Look them up.) This has the benefit of not caring at all whether the runtime environment of the client looks anything like the runtime environment of the server, as the case is with your setup, where your client is C++ on Linux and your server is C# on Windows.

Upvotes: 2

basav
basav

Reputation: 1495

CORBA is one IPC mechanism that will provide the RPC mechanism that you are looking for.

Here is a link describing communication between C# server and JAVA client.

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

At one of the companies I worked previously, it was used for communication between c++ and java programs in a client/server model.

They used a combination of ACE/TAO libraries.

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

Upvotes: 2

Misgevolution
Misgevolution

Reputation: 845

I think message passing libraries would fit best in to this. Take a look at ZMQ for instance; they have binding for many languages found here so you may have your event dispatcher in one language and listener in the other language. Also take a look at apache thrift

Upvotes: 2

Muhammad Umar Farooq
Muhammad Umar Farooq

Reputation: 521

You would need to go along the lines of Google Protobuf. It is available with C++ and C# as well.

A similar answer from MSDN

It does not matter if you send data from java,c++ or c#, when it goes over the network it's just 1s and 0s. It's a matter of what you do with it on the client/server side. So, be sure that the data that you receive corresponds with the structure that you have (that you want to deserialize to).

Sometimes you need to manually put the bits and bytes together to get it all working out. However, there is something called "Protobuff" that can help you get a common structure of the data that you send, google it and read all about it.

You can implement client server with sockets and serialize/deserialize it using protobuf. (MSDN link might help in solution)

Upvotes: 8

Related Questions