2010-01-07 4 views
0

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

Имейте в виду, что сообщение будет двунаправленным. Является ли чистый сокет лучшим способом передачи данных в настоящее время? Вы бы порекомендовали SOAP, Webservices или другой тип инкапсуляции к этому приложению?

+2

Кому это? C или C++? – dreamlax

+0

dreamlax, C++ является предпочтительным. – gmuller

ответ

1

В эти дни многие люди используют веб-службы и SOAP. Для этой цели доступны пакеты C++. Они будут использовать сокеты для вас и обрабатывать все попытки перебора данных. Если вы работаете в Unix/Linux, дайте или возьмите системные дескрипторы System V.4, ваши данные в конечном итоге перейдут через сокеты.

В Windows есть другие варианты, если вы хотите поговорить только с другими окнами Windows.

Вы также можете изучить CORBA, но это не обычная практика.

1

При любой передаче данных необходимо будет сериализовать и десериализовать объекты.

Первый вопрос, который вы хотите задать, заключается в том, нужен ли вам бинарный или текстовый формат для передачи. Бинарные форматы данных имеют явное преимущество в том, что они полностью легко разбираются (при условии, что они являются простыми структурами POD - вы можете просто их перевести в структуру).

Передача на основе текста должна быть проще отладки, так как вы можете просто прочитать текст. Вам все равно придется разбирать их.

Веб-службы на основе SOAP - это простые пакеты на основе XML, отправленные обычно через HTTP. Что-то должно будет анализировать HTTP и XML. Простота использования не является неотъемлемой, а зависит от инструментов в вашем распоряжении. Если у вас есть хорошие инструменты, во что бы то ни стало, но то же самое относится к любой форме обмена данными.

Вы можете взглянуть на Boost Serialization Library. Это довольно сложная библиотека и требует, чтобы вы написали код, указывающий, какие члены должны быть сериализованы. У ИТ есть хорошая поддержка как текста (включая xml), так и двоичной сериализации. Это также кросс-платформа.

+0

Если у вас есть тот же архитектор с обеих сторон передачи, сериализации нет необходимости. – 2010-01-07 12:44:31

+0

Сериализация - самая простая часть. Я думаю, худшая часть состоит в том, чтобы разобрать, объекты в буфере приема и извлечь их. Вот почему я спросил. – gmuller

+1

Разбор - процесс десериализации. Если вы используете структуры с размерами бинарных исправлений, вам не нужно делать какие-либо разборки, что так всегда - вы просто выгружаете данные привязки в соответствующие структуры. @Neil - даже если у вас есть одна и та же архитектура, вам нужно взять возможно сложное представление ваших данных в памяти и как-то отправить его байтом по байту вниз по проводам. сериализованная. – doron

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