2010-07-30 4 views
3

Я хотел бы создать соединение между двумя приложениями. Должен ли я использовать Client-Server или есть другой способ эффективной связи между собой? Есть ли какие-либо готовые сетевые клиентские серверные серверы C++, которые легко использовать/повторно использовать и внедрять?Клиент и сервер

Применение # 1 < ---> (Клиент) < ---> (Сервер) < ---> Приложение # 2

Спасибо!

+0

Я считаю, что вы можете сделать это, используя программирование сокетов. на самом деле я делал подобное клиент-серверное приложение в течение моих лет колледжа, и он работал отлично. – SoftwareGeek

+0

какие-либо показатели того, какие данные вы планируете передавать? Это может повлиять и на выбор. Необходимо ли постоянно поддерживать соединение между ПК? Скорость? Надежность? Etc и т. Д. –

ответ

4

Клиент/сервер - это шаблон общей архитектуры (подобно фабрике, делегированию, наследованию, мосту - шаблоны проектирования). То, что вы, вероятно, хотите, это библиотека, позволяющая устранить скуку упаковки и распаковку ваших данных в формате, который можно отправить по кабелю. Я настоятельно рекомендую вам ознакомиться с библиотекой protocol buffers, которая широко используется в Google и выпущена как открытый источник. Он автоматически кодирует/декодирует данные, и это позволяет программам, написанным на разных языках, отправлять и получать сообщения одного типа со всей грязной работой, выполненной для вас автоматически. Protobuf имеет дело только с кодировкой, а не с отправкой и получением. Для этого вы можете использовать примитивные сокеты (настоятельно рекомендуется против этого) или асинхронную библиотеку ввода-вывода .

Я должен добавить, что вы, кажется, путаетесь в значении клиента и сервера, поскольку на диаграмме у вас есть приложение, говорящее с клиентом, который разговаривает с сервером, который разговаривает с другим приложением. Это не верно. Ваше приложение является клиентом (или сервером). Клиент/сервер - это просто роль, которую ваше приложение использует во время общения. Приложение считается клиентом, когда оно инициирует соединение или запрос, в то время как приложение считается сервером, когда оно ожидает и обрабатывает входящие запросы. Клиент/сервер - это просто условия для описания поведения приложения.

+0

+1 для Boost.Asio, это фантастическая библиотека –

1

Если вы знаете, что приложения будут работать на одном компьютере, вы можете использовать сокеты, очереди сообщений, каналы или общую память. Какой вариант вы выбираете, зависит от множества факторов.

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

Если они работают на разных машинах, вам необходимо связаться через сокеты.

There's a tutorial here, with decent code samples.

+0

. Еще одно соображение - как клиент может видеть сервер. Если сервер находится через Интернет, вам, скорее всего, понадобится веб-сервис или оберните комм в http – seand

+0

... за исключением случаев, когда HTTP будет совершенно неуместным. – bstpierre

+0

@bstpierre, где http будет неуместным? Ключевым преимуществом HTTP является то, что такой трафик почти всегда поддерживается. Многие маршрутизаторы и брандмауэры будут падать или блокировать законный трафик, если это не HTTP-трафик. –

Смежные вопросы