Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
1

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

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

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

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

Подскажите что я делаю не так? Если нужен пример, то сейчас сделаю простенький без всяких лишних функций.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 12:22
Ответы с готовыми решениями:

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

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

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

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

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

8
Вованя
143 / 139 / 64
Регистрация: 20.02.2014
Сообщений: 498
Завершенные тесты: 1
21.02.2014, 13:10 2
А как вы посчитали кол-во пришедших пакетов то?
Какой бы размер буфера вы не указали бы функции sendto или recvfrom, IP разбивает дейтаграммы на какой-то свой размер, затем канальный уровень разбивает это все на кадры, не превышающие размеры MTU, затем это все обратно собирается на удаленной машине, поэтому что конкретно вы считаете за пакеты?
Если, я, конечно же, не ошибаюсь.
0
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
21.02.2014, 13:36  [ТС] 3
Цитата Сообщение от Вованя Посмотреть сообщение
А как вы посчитали кол-во пришедших пакетов то?
Какой бы размер буфера вы не указали бы функции sendto или recvfrom, IP разбивает дейтаграммы на какой-то свой размер, затем канальный уровень разбивает это все на кадры, не превышающие размеры MTU, затем это все обратно собирается на удаленной машине, поэтому что конкретно вы считаете за пакеты?
Если, я, конечно же, не ошибаюсь.
Я в пакет записываю как одну переменную размер всего пакета не считая шапки. По нему и слежу.

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

Добавлено через 11 минут
Нашел вот такую вещь (rx_que_size) но не понимаю как ей воспользоваться в Qt.
0
Вованя
143 / 139 / 64
Регистрация: 20.02.2014
Сообщений: 498
Завершенные тесты: 1
21.02.2014, 13:37 4
Честно говоря, не очень понимаю в чем, собственно, вопрос.
Вы уж приведите пример, как посылаете и принимаете.
0
CheshireCat
Эксперт С++
2914 / 1263 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.02.2014, 13:49 5
А ты учитываешь, что UDP вообще не дает никаких гарантий доставки? Поэтому будет ли принят из 8000 пакетов только один, сто или все 8000 - это все нормальные случаи. Разработчик должен учитывать их обязательно. Даже если не будет принято ни одного пакета - это также нормальный случай.
1
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
21.02.2014, 14:52  [ТС] 6
Цитата Сообщение от Вованя Посмотреть сообщение
Честно говоря, не очень понимаю в чем, собственно, вопрос.
Вы уж приведите пример, как посылаете и принимаете.
Сейчас постораюсь, просто убирать надо много что бы было попроще.

Цитата Сообщение от 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
aLarman
650 / 571 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
Завершенные тесты: 2
21.02.2014, 15:07 7
есть такой метода setsockopt описание тут
попробуйте ей поиграться
1
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
21.02.2014, 15:42  [ТС] 8
Цитата Сообщение от aLarman Посмотреть сообщение
есть такой метода setsockopt описание тут
попробуйте ей поиграться
Спасибо но надо под Linux.
Решил проблему так. 32 пакета отправляю по 8 с задержкой в 3 мс укладываюсь и потерь почти нет
0
aLarman
650 / 571 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
Завершенные тесты: 2
21.02.2014, 15:44 9
Цитата Сообщение от Bmg113 Посмотреть сообщение
Спасибо но надо под Linux.
оно и там есть тык
1
21.02.2014, 15:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 15:44

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

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

Отправка и прием TCP пакетов
Здравствуйте, пишу тсп клиент сервер. Все бы ничего но с толкнулся с такой проблемой при отправке...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru