Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
#1

UDP отправка и прием пакетов - C++

21.02.2014, 12:22. Просмотров 1941. Ответов 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 отправка и прием пакетов (C++):

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

Прием MPI_Bcast - C++
При передаче сообщений с помощью функции MPI_Send, принять процессом-получателем можно с помощью функции MPI_Recv, а как принимать...

Прием врача - C++
Очень тяжелая задача(( я пробовал сам писать но ни чего не получилось(( Помогите!!! Прием врача. Врач принимает по четным дням в...

Задача Прием у директора - C++
Здравствуйте, уважаемые пользователи этого замечательного форума! Написал несложную программу на работу со структурой (E-olymp №13),...

Шифрование пакетов - C++
Всем привет Есть проблема, нужно чтобы трафик между сервером и клиентом шифровался от перехвата игровых пакетов Занимается ли кто...

Server Socket и прием данных - C++
Доброго времени суток. Никак не могу разобраться с компонентом ServerSocket. Итак, ситуация. У меня есть модуль XBee WiFi, на него с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Вованя
133 / 133 / 48
Регистрация: 20.02.2014
Сообщений: 463
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
Вованя
133 / 133 / 48
Регистрация: 20.02.2014
Сообщений: 463
21.02.2014, 13:37 #4
Честно говоря, не очень понимаю в чем, собственно, вопрос.
Вы уж приведите пример, как посылаете и принимаете.
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
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
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
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
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.02.2014, 15:44 #9
Цитата Сообщение от Bmg113 Посмотреть сообщение
Спасибо но надо под Linux.
оно и там есть тык
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 15:44
Привет! Вот еще темы с ответами:

Прием, передача и сравнение последовательности Баркера - C++
Подскажите пожалуйста.Пишу программу клиент-сервер. Клиент передает м-последовательность или последовательность Баркера, сервер ее...

Подскажите, как называется этот прием? - C++
Всем привет:) Допустим, имеется какой-либо класс, имеющий поля данных и два метода: class someClass { private: ...

Декодер Slip пакетов C++ - C++
День добрый! Столкнулся на практике с таким заданием: Написать декодер Slip пакетов на C++, но я не обладаю достаточными для этого...

Инкапсуляция пакетов TCP/IP - C++
Всем привет есть такой вопрос. Надо было написать протокол для программыки типа клиет-сервер. Фишка в том что я пищу только часть...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.02.2014, 15:44
Ответ Создать тему
Опции темы

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