Переносная легкая оболочка C ++ - PullRequest
17 голосов
/ 17 декабря 2010

Я действительно думал, что это будет легче найти ...

Мне нужна портативная оболочка для сокетов c ++.Я планирую использовать его для приложения Windows Server и клиента, который будет работать на встроенном устройстве под управлением ulinux (или чего-то подобного).Я бы использовал Boost, но мне нужно, чтобы он был легким и простым для добавления в проект встраиваемого устройства.

Кроме того, я хотел бы, чтобы это была оболочка "более высокого уровня" ... поэтому она запускает фоновый потокчитать данные и информировать через обратный вызов ...

Есть идеи?

Ответы [ 9 ]

11 голосов
/ 17 декабря 2010

Я бы предложил Boost.Asio . Несмотря на его название, вы не обязаны использовать асинхронный ввод-вывод. Вы можете использовать синхронный ввод-вывод и потоки, как и предполагает ваш вопрос.

Boost.Asio - кроссплатформенный C ++ библиотека для сети и низкоуровневого ввода / вывода программирование, которое предоставляет разработчикам с последовательной асинхронной моделью используя современный подход C ++.

7 голосов
/ 17 декабря 2010

Просто научитесь использовать API сокетов напрямую.Вы можете легко обернуть это самостоятельно.Это не , что сложно, и вы можете начать с превосходного руководства Биджа .Как говорит Бидж:

API сокетов, хотя и запущенный людьми из Беркли, был портирован на многие платформы, включая Unix, Linux и даже Windows.

В своем руководстве он подробно описывает очень маленькое дополнение, которое вам нужно сделать, чтобы получить одинаковый API в системах Windows и * nix.

После того, как вы выучите, оберните его самостоятельно, если вы так склонны.Тогда вы сможете точно определить, насколько «легким» он вам нужен.

2 голосов
/ 01 августа 2015

Я знаю, что это старый, но есть очень хорошая и простая реализация в расположении ниже, которую я использую для личного использования.Некоторое время назад я реализовал свою собственную обертку, но потерял код и нашел этот онлайн, который намного лучше моего:

http://cs.ecs.baylor.edu/~donahoo/practical/CSockets/practical/

2 голосов
/ 18 декабря 2010

Если вам действительно не нравится Boost asio, то вам может понравиться поддержка сокетов в dlib . Это проще в том смысле, что он использует традиционный блокирующий ввод-вывод и потоки, а не шаблон асинхронного проактора asio. Например, это упрощает создание многопоточного TCP-сервера, который читает и пишет из iostreams. Смотрите, например, пример . Или вы можете просто сделать простой iosockstream , если не действует как сервер.

1 голос
/ 19 декабря 2010

Взгляните на ENet http://enet.bespin.org/, он очень легкий и портативный и работает поверх UDP, с дополнительной поддержкой надежных пакетов. Он прост в использовании, API низкоуровневый и с небольшим снижением производительности. Вы обладаете высокой степенью контроля над управлением памятью, что может быть полезно, если работа в сети является узким местом для вас, а используемая вами реализация malloc / new плохо работает при многопоточности.

Было бы не так сложно реализовать ваш поток высокого уровня «оптимально», поскольку существует дополнительная поддержка для блокировки приема, и библиотека является «библиотекой», а не структурой, поэтому вы принимаете решение вместо библиотеки.

0 голосов
/ 05 января 2018

Я лично создаю свою собственную оболочку AsIO для TCP и последовательных сокетов, и я начал с просмотра следующего учебника:

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/

Я нашел первый очень полезным и простым для понимания.

0 голосов
/ 10 апреля 2014

C ++ CSP2

Пользовался, это понравилось.Стабильный и мощный

0 голосов
/ 12 февраля 2014

Старый вопрос, но для C ++, синхронных сокетов в стиле BSD это примерно столько же, сколько вы можете найти http://code.google.com/p/ting/source/browse/trunk/src/ting/net/

Это бывает с исключениями.Вы могли бы сделать его немного более легким в качестве библиотеки шаблонов только для заголовка и, возможно, сделать исключения необязательными, но это немного изменило бы API

Сетевые классы POCO довольно похожи, но требуют большего количества зависимостей от другихчасти Poco lib

0 голосов
/ 17 декабря 2010

Возможно, вы можете взглянуть на http://www.pt -framework.org /

...