Это возможно реализовать взаимодействие клиент-сервер между программой C ++ (клиентская программа), работающей в ОС Linux, с программой C # (серверная программа), работающей в Windows, с использованием реализации RMI?Может ли кто-нибудь предложить любой возможный способ … Любые полезные ссылки приветствуются
Вам нужно будет идти по линии Google Protobuf. Это доступно с C ++ и C # также.
Аналогичный ответ от MSDN
Неважно, если вы отправляете данные из Java, C ++ или C #, когда он идет
по сети это только 1 и 0. Это вопрос того, что вы делаете
с ним на стороне клиента / сервера. Итак, убедитесь, что данные, которые вы
получить соответствует структуре, которая у вас есть (что вы хотите
десериализовать в).Иногда вам нужно вручную собрать биты и байты, чтобы получить
это все работает. Однако есть нечто, называемое «Protobuff», которое может помочь вам получить общую структуру данных, которые вы отправляете,
погуглите это и прочитайте все об этом.
Вы можете реализовать клиентский сервер с сокетами и сериализовать / десериализовать его с помощью protobuf.
(Ссылка MSDN может помочь в решении)
Я думаю, что библиотеки передачи сообщений лучше всего подходят для этого. Взгляни на ZMQ например; они связывают многие найденные языки Вот
так что у вас может быть диспетчер событий на одном языке и слушатель на другом языке. Также взгляните на Apache Thrift
CORBA — это один механизм IPC, который обеспечит механизм RPC, который вы ищете.
Вот ссылка, описывающая связь между сервером C # и клиентом JAVA.
http://iiop-net.sourceforge.net/dnAdderRmiClient.html
В одной из компаний, с которыми я работал ранее, она использовалась для связи между программами c ++ и java в модели клиент / сервер.
Они использовали комбинацию библиотек ACE / TAO.
Я бы порекомендовал вам сделать не использовать удаленный вызов метода для связи между клиентом и сервером. В девяностые годы мы привыкли считать, что RMI — это хорошая идея, но с тех пор мы поняли, что существуют гораздо лучшие способы связи между компьютерами.
Самый популярный способ — использование веб-сервисов, а самый простой вариант веб-сервисов — это веб-сервисы RESTful. (Ищите их.) Это дает преимущество в том, что вам совершенно не важно, выглядит ли среда выполнения клиента как среда выполнения сервера, как в случае с вашей установкой, где ваш клиент — C ++ в Linux и ваш сервер. это C # на Windows.
XPCOM Mozilla может быть вашим мостом. Также есть PyXPCOM. Реально, хотя самый простой способ — иметь промежуточный VBox. Таким образом, вы запускаете экземпляр VBox (под управлением Windows) на компьютере с Linux, а затем используете VBox API (из C ++) для выдачи команд в VBox. Таким образом, вы в конечном итоге
Linux <—xpCom -> VBox <—COM -> Windows
При работе по сети это протокол что важно, а не клиент / сервер.
В телекоммуникациях, связи протокол это система правил которые позволяют двум или более объектам системы связи передавать информацию посредством любого изменения физической величины. Это правила или стандарты, определяющие синтаксис, семантику и синхронизацию связи, а также возможные методы устранения ошибок..
Источник Акцент мой.
Итак, для связи вашего клиента C ++ и сервера C # вам нужно выбрать или определить протокол, который будет использоваться для связи.
Ваш протокол может быть построен выше другого протокола. Например, вы можете использовать HTTP для транспортировки и определить свой протокол, описывающий, какой синтаксис должен использоваться для сообщений в HTTP-запросах и телах ответов. Это поможет вам, потому что есть много готовых решений для HTTP-коммуникации.
На самом деле вы все равно будете строить свой протокол на основе другого. Сам HTTP строится выше TCP. Вам нужно будет выбрать протоколы низкого или высокого уровня. У всех есть свои плюсы и минусы.
Но вам придется иметь дело с сообщениями между вашим клиентом и сервером самостоятельно.
В качестве альтернативы вы можете использовать решение для удаленного вызова процедур (или RPC):
Удаленный вызов процедур (RPC) — это межпроцессное взаимодействие, которое позволяет компьютерной программе запускать подпрограмму или процедуру в другом адресном пространстве (обычно на другом компьютере в совместно используемой сети) без явного кодирования программистом деталей этого удаленного взаимодействия. ,
Таким образом, это означает, что вам нужно только следовать инструкциям, как построить ваш клиент и сервер, и все коммуникации будут скрыты и будут выглядеть как просто вызов метода объекта.
Вот краткий список возможных решений RPC:
Чтобы обернуть это:
Это не проблема, что ваш клиент и сервер находятся в разных средах и разрабатываются на разных платформах. Вам нужно только наладить связь между ними, используя вашу собственную систему обмена сообщениями на основе какого-либо протокола или систему RPC.
Мы могли бы просто написать программу на C # для прослушивания сообщений с определенного порта и написать другую клиентскую программу на C ++ для записи сообщений на этот порт. Таким образом, мы могли обмениваться данными обоими приложениями.