LINUX.ORG.RU

Чем ловить UDP в современных плюсах?

 ,


0

2

Привет, ЛОР.

Пишу программу на C++ без GUI, но с работой по сети, в частности, надо принимать и обрабатывать UDP-пакеты. Не так часто приходится начинать проекты с нуля, поэтому хочется сделать красиво.

Пока в голову приходят варианты:

  1. Сишные сокеты (<sys/socket.h> и всё такое). Гарантированно будет работать, но как-то в плюсовой программе… ну неопрятненько, что ли. Хотя возможно, это мои личные тараканы.
  2. Boost.Asio. Пока вижу её предпочтительным вариантом (кроме того, что раньше с ней не работал).
  3. QtNetwork. За пределами проектов, где используются другие кутешные модули, выглядит стрельбой из пушки по воробьям.

Что бы выбрали вы в 2026 году? Пока склоняюсь в сторону Boost.Asio, но может, уже что-то более стандартное и надёжное появилось?

Стандарт (по предварительной информации) C++17 (но буду уточнять этот момент).

★★★★★

Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от next_time

gstreamer гвоздями прибит к gtk

Glib и GObject — это не GTK. На gtk там завязан gst-plugin-gtk, а если без него, то из своего кода нужно дёргать функиця gstreamer и функции gtk.

но вот сервер - уже приплыли, а где клиент очень быстро и сервер появляется

Не факт, да и не обязательно одну кодовую базу для клиента и сервера.

mky ★★★★★
()
Ответ на: комментарий от Reset

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

s-warus ★★★★★
()
Ответ на: комментарий от mky

Glib == qtcore

Не факт, да и не обязательно одну кодовую базу для клиента и сервера

лучше использовать удобные фичи с самого начала: это называется архитектура

next_time ★★★★★
()
Ответ на: комментарий от next_time

это называется архитектура

Нет, билд / рантайм зависимость в сотни тыс / миллионы LOC ради сахарка или пары вспомогательных классов-функций не называется "архитектурой". Это называется по другому.

r--r--r--
()
Последнее исправление: r--r--r-- (всего исправлений: 1)
Ответ на: комментарий от next_time

А это

gcc-14-base
libatomic1
libblkid1
libc6
libdouble-conversion3
libffi8
libgcc-s1
libglib2.0-0t64
libicu76
liblzma5
libmount1
libpcre2-16-0
libpcre2-8-0
libselinux1
libstdc++6
libxml2
libzstd1
shared-mime-info
zlib1g

кто будет считать? Пушкин?

И это не говоря уж о том, что работа с сетью в другой библиотеке, где этот список будет выглядеть вот так:

gcc-14-base
libatomic1
libblkid1
libc6
libcap2
libcom-err2
libdbus-1-3
libdouble-conversion3
libffi8
libgcc-s1
libglib2.0-0t64
libgssapi-krb5-2
libicu76
libk5crypto3
libkeyutils1
libkrb5-3
libkrb5support0
liblzma5
libmount1
libpcre2-16-0
libpcre2-8-0
libqt5core5t64
libqt5dbus5t64
libselinux1
libssl3t64
libstdc++6
libsystemd0
libxml2
libzstd1
openssl-provider-legacy
shared-mime-info
zlib1g
r--r--r--
()
Ответ на: комментарий от r--r--r--

эти зависимости есть у любого хеллоуворлда под линуксом, ну кроме libsystemd0 – это вопросы к вашему дистрибутиву

next_time ★★★★★
()
Ответ на: комментарий от r--r--r--

да кто-то вообще дауншифтит в деревне без интернета

next_time ★★★★★
()

Что бы выбрали вы в 2026 году? Пока склоняюсь в сторону Boost.Asio, но может, уже что-то более стандартное и надёжное появилось?

на мой взгляд asio очень шикарен — при чём можно standalone версию использовать (не Boost)

safocl ★★
()
Ответ на: комментарий от yorshka

нууу... на мой взгляд это сильно преувеличенная инфа про «почти завезли» — просто в glibc++ имеется такое в экспериментале.

safocl ★★
()
Ответ на: комментарий от vtVitus

Имно шобы для спп не брать qt, нужно обоснование, а не наоборот.

так «не брать qt в проект» это вроде бы думается и есть само обоснование, что бы не брать qt в проект...

safocl ★★
()
Ответ на: комментарий от safocl

Не. Есть standalone реализация. Лень искать, но я видел реализацию на гитхабе.

yorshka
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.