Возможно ли, что мы могли бы связать программу на C ++ в linux с программой на C #, действующей в качестве сервера, используя удаленный вызов метода?

Это возможно реализовать взаимодействие клиент-сервер между программой C ++ (клиентская программа), работающей в ОС Linux, с программой C # (серверная программа), работающей в Windows, с использованием реализации RMI?Может ли кто-нибудь предложить любой возможный способ … Любые полезные ссылки приветствуются

4

Решение

Вам нужно будет идти по линии Google Protobuf. Это доступно с C ++ и C # также.

Аналогичный ответ от MSDN

Неважно, если вы отправляете данные из Java, C ++ или C #, когда он идет
по сети это только 1 и 0. Это вопрос того, что вы делаете
с ним на стороне клиента / сервера. Итак, убедитесь, что данные, которые вы
получить соответствует структуре, которая у вас есть (что вы хотите
десериализовать в).

Иногда вам нужно вручную собрать биты и байты, чтобы получить
это все работает. Однако есть нечто, называемое «Protobuff», которое может помочь вам получить общую структуру данных, которые вы отправляете,
погуглите это и прочитайте все об этом.

Вы можете реализовать клиентский сервер с сокетами и сериализовать / десериализовать его с помощью protobuf.
(Ссылка MSDN может помочь в решении)

7

Другие решения

Я думаю, что библиотеки передачи сообщений лучше всего подходят для этого. Взгляни на ZMQ например; они связывают многие найденные языки Вот
так что у вас может быть диспетчер событий на одном языке и слушатель на другом языке. Также взгляните на Apache Thrift

2

CORBA — это один механизм IPC, который обеспечит механизм RPC, который вы ищете.

Вот ссылка, описывающая связь между сервером C # и клиентом JAVA.

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

В одной из компаний, с которыми я работал ранее, она использовалась для связи между программами c ++ и java в модели клиент / сервер.

Они использовали комбинацию библиотек ACE / TAO.

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

2

Я бы порекомендовал вам сделать не использовать удаленный вызов метода для связи между клиентом и сервером. В девяностые годы мы привыкли считать, что RMI — это хорошая идея, но с тех пор мы поняли, что существуют гораздо лучшие способы связи между компьютерами.

Самый популярный способ — использование веб-сервисов, а самый простой вариант веб-сервисов — это веб-сервисы RESTful. (Ищите их.) Это дает преимущество в том, что вам совершенно не важно, выглядит ли среда выполнения клиента как среда выполнения сервера, как в случае с вашей установкой, где ваш клиент — C ++ в Linux и ваш сервер. это C # на Windows.

2

XPCOM Mozilla может быть вашим мостом. Также есть PyXPCOM. Реально, хотя самый простой способ — иметь промежуточный VBox. Таким образом, вы запускаете экземпляр VBox (под управлением Windows) на компьютере с Linux, а затем используете VBox API (из C ++) для выдачи команд в VBox. Таким образом, вы в конечном итоге

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

1

При работе по сети это протокол что важно, а не клиент / сервер.

В телекоммуникациях, связи протокол это система правил которые позволяют двум или более объектам системы связи передавать информацию посредством любого изменения физической величины. Это правила или стандарты, определяющие синтаксис, семантику и синхронизацию связи, а также возможные методы устранения ошибок..

Источник Акцент мой.

Итак, для связи вашего клиента C ++ и сервера C # вам нужно выбрать или определить протокол, который будет использоваться для связи.

Ваш протокол может быть построен выше другого протокола. Например, вы можете использовать HTTP для транспортировки и определить свой протокол, описывающий, какой синтаксис должен использоваться для сообщений в HTTP-запросах и телах ответов. Это поможет вам, потому что есть много готовых решений для HTTP-коммуникации.

На самом деле вы все равно будете строить свой протокол на основе другого. Сам HTTP строится выше TCP. Вам нужно будет выбрать протоколы низкого или высокого уровня. У всех есть свои плюсы и минусы.

Но вам придется иметь дело с сообщениями между вашим клиентом и сервером самостоятельно.

В качестве альтернативы вы можете использовать решение для удаленного вызова процедур (или RPC):

Удаленный вызов процедур (RPC) — это межпроцессное взаимодействие, которое позволяет компьютерной программе запускать подпрограмму или процедуру в другом адресном пространстве (обычно на другом компьютере в совместно используемой сети) без явного кодирования программистом деталей этого удаленного взаимодействия. ,

Таким образом, это означает, что вам нужно только следовать инструкциям, как построить ваш клиент и сервер, и все коммуникации будут скрыты и будут выглядеть как просто вызов метода объекта.

Источник

Вот краткий список возможных решений RPC:

  • Компонентная объектная модель с DCOM. Wiki: COM,DCOM. MSDN: COM, DCOM.
  • Простой протокол доступа к объектам. Wiki.
  • Windows Communication Foundation. Wiki. MSDN. ТАК(кредиты Санджу за ссылку).

Чтобы обернуть это:

Это не проблема, что ваш клиент и сервер находятся в разных средах и разрабатываются на разных платформах. Вам нужно только наладить связь между ними, используя вашу собственную систему обмена сообщениями на основе какого-либо протокола или систему RPC.

1

Мы могли бы просто написать программу на C # для прослушивания сообщений с определенного порта и написать другую клиентскую программу на C ++ для записи сообщений на этот порт. Таким образом, мы могли обмениваться данными обоими приложениями.

1
По вопросам рекламы [email protected]