Портативная облегченная оболочка сокетов C++
Я действительно думал, что это будет легче найти...
Мне нужна портативная оболочка сокетов c++. Я планирую использовать его для приложения windows server и клиента, который будет работать на встроенном устройстве под управлением ulinux (или что-то подобное). Я бы использовал Boost, но мне нужно, чтобы он был легким и легким для добавления в проект встроенного устройства.
Также я хотел бы, чтобы это была оболочка" более высокого уровня"... таким образом, он запускает фоновый поток для чтения данных и информирует be over a обратный звонок...
Есть идеи?
9 ответов:
Просто научитесь использовать API сокета напрямую. Затем вы можете легко завернуть его сами. Это не , что трудно, и вы можете начать с превосходного руководства Beej. Как говорит Бидж:
API сокетов, хотя и запущенный Народ Беркли, был портирован на многие многие платформы, включая Unix, Linux, и даже окна.
В своем руководстве он подробно описывает очень небольшое дополнение, которое вам нужно сделать, чтобы получить тот же API в Windows и *nix системный.
Как только вы научитесь, заверните его сами, если вам так хочется. Тогда вы можете точно контролировать, насколько "легкий" вы хотите его.
Я бы предложил повысить.Asio . Несмотря на название, вы не обязаны использовать асинхронный ввод-вывод.вы можете использовать синхронный ввод-вывод и потоки, как следует из вашего вопроса.
Повышение.Asio-это кроссплатформенный C++ библиотека для сетевого и низкоуровневого ввода-вывода программирование, которое предоставляет разработчикам с согласованной асинхронной моделью используя современный подход C++.
Если вам действительно не нравится Boost asio, то вам может понравиться поддержка сокетов в dlib. Это проще в том смысле, что он использует традиционные блокирующие IO и потоки, а не асинхронный шаблон proactor asio. Например, это позволяет легко сделать потоковый TCP-сервер, который читает и записывает из потоков iostreams. См., например, этот пример . Или вы можете просто сделать простой iosockstream , если не выступаете в качестве сервера.
Я знаю, что это старый, но есть очень хорошая и простая реализация в расположении ниже, которое я использую для личного использования. Некоторое время назад я реализовал свою собственную оболочку, но потерял код и нашел эту в интернете, которая намного лучше моей:
Http://cs.ecs.baylor.edu/~donahoo / practical / CSockets / practical /
Взгляните на ENet http://enet.bespin.org/ он очень легкий и портативный и работает поверх UDP, с дополнительной поддержкой надежных пакетов. Он прост в использовании, API является низкоуровневым и с небольшими затратами на производительность. У вас есть высокая степень контроля над управлением памятью, что может быть хорошо, если сеть является узким местом для вас, и реализация malloc/new, которую вы используете, плохо работает при многопоточности.
Было бы не так уж трудно реализовать ваш высокоуровневый поток "оптимально", так как существует дополнительная поддержка блокировки приема, и библиотека является" библиотекой", а не фреймворком, поэтому вы принимаете решение вместо библиотеки.
Возможно, вы можете взглянуть на http://www.pt-framework.org/
Старый вопрос, но для синхронных сокетов в стиле C++, BSD это примерно такая же минимальная обертка багажа, какую вы можете найти http://code.google.com/p/ting/source/browse/trunk/src/ting/net/
Он приходит с исключениями. Вы могли бы сделать немного более легкий в качестве библиотеки шаблонов только для заголовка, и, возможно, сделать исключения необязательными, но это немного изменило бы API
Сетевые классы POCO очень похожи, но требуют больше зависимостей от других частей Poco lib
Я лично создаю свою собственную оболочку AsIO как для TCP, так и для последовательных сокетов, и я начал с просмотра следующего руководства:
Https://www.gamedev.net/blogs/blog/950-they-dont-teach-this-stuff-in-school/
И
Я нашел первый очень полезным и простым для понимания.