Портативная облегченная оболочка С++-сокетов
Я действительно думал, что это будет легче найти...
Мне нужна переносимая оболочка сокетов С++. Я планирую использовать его для приложения сервера Windows и клиента, который будет работать на встроенном устройстве, использующем ulinux (или что-то подобное). Я бы использовал Boost, но мне нужно, чтобы он был легким и легким для добавления в проект встроенного устройства.
Также я хотел бы, чтобы это была "оболочка более высокого уровня"... поэтому она запускает фоновый поток для чтения данных и информирует об обратном вызове...
Любые идеи?
Ответы
Ответ 1
Просто научитесь напрямую использовать API сокета. Затем вы можете легко обернуть его самостоятельно. Это не так сложно, и вы можете начать с Beej превосходным руководством. Как говорит Бий:
API сокетов, запущенный Беркли, был перенесен на многие многие платформы, включая Unix, Linux, и даже Windows.
В своем руководстве он подробно описывает очень небольшое дополнение, которое вам нужно сделать, чтобы получить тот же API в системах Windows и * nix.
Как только вы узнаете, оберните его, если вы так склонны. Затем вы можете точно определить, как "легкий" вы хотите.
Ответ 2
Я предлагаю Boost.Asio. Несмотря на это имя, вы не должны использовать асинхронный ввод-вывод. Вы можете использовать синхронный ввод-вывод и потоки, как следует из вашего вопроса.
Boost.Asio - кросс-платформенный С++ библиотека для сетевого и низкоуровневого ввода-вывода программирование, предоставляющее разработчикам с последовательной асинхронной моделью используя современный подход на C++.
Ответ 3
Если вам действительно не нравится Boost asio, вам может понравиться поддержка сокетов в dlib. Это проще в том смысле, что он использует традиционную блокировку ввода-вывода и потоков, а не асинхронный шаблон проактора asio. Например, это упрощает создание потокового TCP-сервера, который читает и записывает из iostreams. См. Этот пример. Или вы можете просто создать простой iosockstream, если он не работает как сервер.
Ответ 4
Я знаю, что это старо, но есть очень хорошая и простая реализация в нижнем местоположении, которое я использую для личного использования. Внедрил мою собственную оболочку некоторое время назад, но потерял код и нашел это онлайн, что намного лучше, чем мое:
http://cs.ecs.baylor.edu/~donahoo/practical/CSockets/practical/
Ответ 5
Взгляните на ENet http://enet.bespin.org/, он очень легкий и портативный и работает поверх UDP с дополнительной поддержкой надежных пакетов. Он прост в использовании, API является низкоуровневым и с небольшими накладными расходами. У вас есть высокая степень контроля над управлением памятью, что может быть хорошим, если сетевое взаимодействие является узким местом для вас, а используемая вами malloc/новая реализация плохо работает при многопоточности.
Невозможно было бы реализовать поток высокого уровня "оптимально", поскольку есть дополнительная поддержка блокировки приема, а библиотека - это "библиотека", а не структура, поэтому вы принимаете решение вместо библиотеки.
Ответ 6
Возможно, вы можете взглянуть на http://www.pt-framework.org/
Ответ 7
Старый вопрос, но для С++, синхронных сокетов BSD, это примерно как минимальная обертка багажа, как вы можете найти
http://code.google.com/p/ting/source/browse/trunk/src/ting/net/
Он приходит с исключениями. Вы можете сделать немного более легким в качестве библиотеки шаблонов только для заголовка и, возможно, сделать исключения необязательными, но это немного изменит API
Сетевые классы POCO очень похожи, но требуют больше зависимостей от других частей Poco lib
Ответ 8
Я лично создаю свою собственную оболочку AsIO для сокетов TCP и Serial, и я начал с рассмотрения следующего учебника:
https://www.gamedev.net/blogs/blog/950-they-dont-teach-this-stuff-in-school/
и
https://objectcomputing.com/resources/publications/mnb/multi-platform-serial-interfacing-using-boost-a-gps-sensor-and-opendds-part-i/
Я нашел первый очень полезный и простой для понимания.
Ответ 9
С++ CSP2
Он любил это. Стабильный и мощный