Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
205 / 151 / 5
Регистрация: 14.03.2013
Сообщений: 784

UDP отправка и прием пакетов

21.02.2014, 12:22. Показов 6296. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем такая ситуация.
Отправляю пакеты объемом по 1 кБайту, пачками по 32 через определенное время (маленькое).
Вообщем около 8000 пакетов уходит за 5 секунд. А приходят за 7 секунд.
(Это если на обоих настроен Broadcast, соединены компьютеры через свич-тупой свич)
Забавно что на приеме только подсчитывается количество пакетов которые реально дошли(по размеру), тобишь приват слот по приему не загружен.

Поставил явные ip адреса и вот что получилось. Приходит за 5 секунд, но приходит 3000 из 8000.
В первом случае потери составляли около 3 пакетов.

Подскажите что я делаю не так? Если нужен пример, то сейчас сделаю простенький без всяких лишних функций.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.02.2014, 12:22
Ответы с готовыми решениями:

Быстрая передача udp пакетов
Есть задача передать udp пакеты, как можно быстрее. Точнее, данные 1024*768 байт должны передаваться за 5 мс, сейчас добился скорости в...

Прием фрагментированных кадров UDP
Добрый день. Возникла проблема с приемом данных UDP. Есть устройство, которое посылает по UDP данные. Пакеты с IP фрагментацией,...

Прием UDP пакетов
Здравствуйте. Сразу скажу, никогда не имел дело с сокетами, тем более с UDP. Сервер у меня на python и с ним проблем никаких нет, клиент...

8
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
21.02.2014, 13:10
А как вы посчитали кол-во пришедших пакетов то?
Какой бы размер буфера вы не указали бы функции sendto или recvfrom, IP разбивает дейтаграммы на какой-то свой размер, затем канальный уровень разбивает это все на кадры, не превышающие размеры MTU, затем это все обратно собирается на удаленной машине, поэтому что конкретно вы считаете за пакеты?
Если, я, конечно же, не ошибаюсь.
0
205 / 151 / 5
Регистрация: 14.03.2013
Сообщений: 784
21.02.2014, 13:36  [ТС]
Цитата Сообщение от Вованя Посмотреть сообщение
А как вы посчитали кол-во пришедших пакетов то?
Какой бы размер буфера вы не указали бы функции sendto или recvfrom, IP разбивает дейтаграммы на какой-то свой размер, затем канальный уровень разбивает это все на кадры, не превышающие размеры MTU, затем это все обратно собирается на удаленной машине, поэтому что конкретно вы считаете за пакеты?
Если, я, конечно же, не ошибаюсь.
Я в пакет записываю как одну переменную размер всего пакета не считая шапки. По нему и слежу.

Добавлено через 8 минут
А можно как нибудь расширить буффер? что бы больше пакетов влезало за раз?

Добавлено через 11 минут
Нашел вот такую вещь (rx_que_size) но не понимаю как ей воспользоваться в Qt.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
21.02.2014, 13:37
Честно говоря, не очень понимаю в чем, собственно, вопрос.
Вы уж приведите пример, как посылаете и принимаете.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.02.2014, 13:49
А ты учитываешь, что UDP вообще не дает никаких гарантий доставки? Поэтому будет ли принят из 8000 пакетов только один, сто или все 8000 - это все нормальные случаи. Разработчик должен учитывать их обязательно. Даже если не будет принято ни одного пакета - это также нормальный случай.
1
205 / 151 / 5
Регистрация: 14.03.2013
Сообщений: 784
21.02.2014, 14:52  [ТС]
Цитата Сообщение от Вованя Посмотреть сообщение
Честно говоря, не очень понимаю в чем, собственно, вопрос.
Вы уж приведите пример, как посылаете и принимаете.
Сейчас постораюсь, просто убирать надо много что бы было попроще.

Цитата Сообщение от CheshireCat Посмотреть сообщение
А ты учитываешь, что UDP вообще не дает никаких гарантий доставки? Поэтому будет ли принят из 8000 пакетов только один, сто или все 8000 - это все нормальные случаи. Разработчик должен учитывать их обязательно. Даже если не будет принято ни одного пакета - это также нормальный случай.
Согласен, но когда я нормирую пакеты (посылаю 1 пакет 1 мс) то все доходит. но за 8 секунд, а мне надо за 5. Вроде как можно у сетевой карты увеличить буфер приема и тогда они будут меньше теряться.

Добавлено через 5 минут
Я немного работал с pcap_t, следил за трафиком по портам и путям. Так вот может как то там можно увеличить буфер приема? Или в самом QUDPSocket можно это сделать??

Добавлено через 44 минуты
Сделал отдельно проекты по приему и передаче 8000 по 1 кбайту ииииии все дошли - спасибо всем, буду глядеть где я схимичил.

Добавлено через 3 минуты
А вот новые новости:
1). Кидал по 8 пакетов (каждый по 1 кбайту) в 1 мс. Дошли все. (Общее время отправки 1 секунда)
2). Кидал по 32 пакета (каждый по 1 кбайт) в 15 мс. Половина не дошла. (Общее время отправки 3,7 секунды)
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
21.02.2014, 15:07
есть такой метода setsockopt описание тут
попробуйте ей поиграться
1
205 / 151 / 5
Регистрация: 14.03.2013
Сообщений: 784
21.02.2014, 15:42  [ТС]
Цитата Сообщение от aLarman Посмотреть сообщение
есть такой метода setsockopt описание тут
попробуйте ей поиграться
Спасибо но надо под Linux.
Решил проблему так. 32 пакета отправляю по 8 с задержкой в 3 мс укладываюсь и потерь почти нет
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
21.02.2014, 15:44
Цитата Сообщение от Bmg113 Посмотреть сообщение
Спасибо но надо под Linux.
оно и там есть тык
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2014, 15:44
Помогаю со студенческими работами здесь

Прием пакетов по UDP
Приветствую. С сетевыми протоколами раньше дела не имел. Начал сразу к практике приступать. Хотел посмотреть, как вообще реализовать...

Прием широковещательных UDP пакетов
Делаю следующим образом: public static void ReceiveFrom1() { Socket sock = new...

Прием UDP пакетов асинхронном режиме
Добрый день. мне необходимо принимать все UDP пакеты приходящие на порт 888. Поделитесь, плиз, примером асинхронного приема UDP...

Передача/прием UDP пакетов stm32f107vct6
Добрый день. Возникла такая нетривиальная задача: общение с ПК посредством UDP пакетов. Общение хаотичное, в основном плата шлет на ПК...

Прием и отправка пакетов
Всем привет! Нужно отправить определенной структуры пакет серверу на порт 28000. Так выглядит структура пакета: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru