Что такое популярная, мультиплатформенная, библиотека сокетов со свободным и открытым исходным кодом [закрыто]

Если Вы хотите рекурсию:

PI = 2 * (1 + 1/3 * (1 + 2/5 * (1 + 3/7 * (...))))

Это стало бы после некоторой перезаписи:

PI = 2 * F(1);

с F (i):

double F (int i) {
    return 1 + i / (2.0 * i + 1) * F(i + 1);
}

Isaac Newton (Вы, возможно, услышали о нем прежде;)) придумал этот прием. Обратите внимание, что я не учел условие конца, для хранения его простым. В реальной жизни, Вы вид потребности один.

8
задан Yu Hao 2 April 2016 в 04:09
поделиться

10 ответов

Я считаю, что как Apache Portable Runtime , так и библиотеки GLib GTK + имеют API сокетов. Поскольку ваш вопрос помечен тегами c и c ++ , я подозреваю, что вам действительно нужны ответы, ориентированные на C ++, но оба они хороши как чистые библиотеки C.

3
ответ дан 5 December 2019 в 04:52
поделиться

Рассмотрите возможность просмотра повышения ?

13
ответ дан 5 December 2019 в 04:52
поделиться

QT , если он не слишком велик для вас. Boost также имеет сетевой код. wxWidgets вместе с wxNet имеет сетевую библиотеку. Другая библиотека - это Clanlib . И, конечно, SDL

8
ответ дан 5 December 2019 в 04:52
поделиться

Если вам нужна очень легкая, только C ++, оболочка в стиле iostreams для сокетов BSD, вы можете рассмотреть skstream - это просто и хорошо работает. Конечно, сам интерфейс iostreams оставляет желать лучшего. Однако skstream действительно оборачивает select и обработку сокетов очень низкого уровня для вас довольно хорошо.

1
ответ дан 5 December 2019 в 04:52
поделиться

ACE может вам помочь!

В этом руководстве представлен обзор уровня адаптации ОС ACE, а также разработка и использование его оболочек C ++ Socket

Разработка эффективного и портативного коммуникационного программного обеспечения с помощью ACE и C ++

4
ответ дан 5 December 2019 в 04:52
поделиться

Да, вы очень далеко продвинетесь с оболочкой Winsock и стандартными сокетами Berkeley. На самом деле различия настолько малы, что почти возможно сделать это с помощью #ifdef непосредственно в коде

То есть, если вы хотите работать на уровне сокета. Если вам нужно что-то более абстрактное, то, конечно, упаковка этого файла дает вам хорошую возможность также скрыть различия.

В частности, Winsock:

  • Требует, чтобы вы "запустили его" вызывая WSAStartup () перед любой другой функцией сокета.
  • Не позволяет использовать простой старый close () в сокете; вы должны использовать closesocket ()
  • Требует, чтобы вы использовали WSAGetLastError () для получения последней ошибки, а не простой errno .

Это три основных вне моей головы, может быть и больше.

3
ответ дан 5 December 2019 в 04:52
поделиться

Здесь есть только один правильный ответ. OpenSSL. Потому что, если у вас есть код сокета, вам тоже захочется устанавливать SSL-соединения. Если вы уже работаете в конкретной кроссплатформенной платформе, привязки OpenSSL могут быть уже доступны. Я не думаю, что сейчас есть какое-то оправдание, чтобы не включать SSL / TLS в ваше приложение с самого начала.

-2
ответ дан 5 December 2019 в 04:52
поделиться

Другой вариант, который вы можете попробовать, - Poco . У Poco есть намного больше, чем просто сокеты, поэтому, если вам нужны другие вещи, он также может предоставить.

Сравнение его с другими инструментами:

  1. Qt имеет графический интерфейс и некоторые очень сложные функции, которых вы не найдете в Poco, но он намного больше.
  2. Boost не так много, как Poco, в плане реальной функциональности, но у него есть библиотеки, такие как справочные оболочки, MPL и препроцессор, которые нельзя найти больше нигде.
  3. Я не помню ACE очень хорошо, но я помню, что он был очень большим с точки зрения исходного кода и компонентов. ACE, похоже, используется для очень высокопроизводительных сетевых приложений, так что это может быть излишним. Но опять же, я не совсем уверен.

Всего два цента

3
ответ дан 5 December 2019 в 04:52
поделиться

Используйте boost :: asio. Очень хорошая библиотека. Перейдите по этой ссылке http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio.html

3
ответ дан 5 December 2019 в 04:52
поделиться