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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
#1

Быстрая передача udp пакетов - C++

19.11.2014, 14:08. Просмотров 1614. Ответов 28
Метки нет (Все метки)

Есть задача передать udp пакеты, как можно быстрее. Точнее, данные 1024*768 байт должны передаваться за 5 мс, сейчас добился скорости в 17мс, размеры пакетов могут быть любыми (сейчас 512). Каким образом можно ускорить передачу в 3 раза? Каким способом осуществляется асинхронная передача пакетов?
Использую Visual Studio 13, на windows 7, библиотека winsock2.h
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 14:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быстрая передача udp пакетов (C++):

UDP отправка и прием пакетов - C++
Вообщем такая ситуация. Отправляю пакеты объемом по 1 кБайту, пачками по 32 через определенное время (маленькое). Вообщем около 8000...

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

Быстрая сортировка - C++
Задача: пользователь задает количество элементов массива (макс. - 500 000), вводит их, затем задает количество запросов (макс. - 10000) и...

Быстрая сортировка - C++
#include <iostream> #include <vector> #include <stdlib.h> #include <stdio.h> using namespace std; int comp(const int...

Быстрая сортировка - C++
Не работают обе версии сортировки.Не понимаю почему.И еще почему-то портится значение второго элемента. Быстрая сортировка 1.0 ...

Быстрая сортировка - C++
Читал о быстрой сортировки смысл понятен но не могу понять некоторые моменты. Каким образом работают два последних условия? Они работают...

28
castaway
19.11.2014, 18:34     Быстрая передача udp пакетов
  #16

Не по теме:

taras atavin, Тарас, ты действительно разбираешься в этом?

0
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
19.11.2014, 18:34  [ТС] #17
Цитата Сообщение от taras atavin Посмотреть сообщение
Смысл такой платы?
Она обрабатывает видео
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2014, 18:40 #18
Не получая его? Интересно, как ты на вникуда получил хоть что то.

Добавлено через 3 минуты
Чтоб хотябы знать, где она сидит, то есть куда именно для неё отправлять видео, она должна отправить хоть что то. Хотябы служебные пакеты. И если в сети только она, то кто же ей видео то посылает? Она по условию не умеет.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
19.11.2014, 18:44 #19
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
выдает кадр за 5ms и 5ms ждет, потом отправляет следующий кадр
Ок. 100 кадров в секунду, больше "не выжать".

По поводу отрывка кода - он ужасен, правда. Лишнее условие в цикле, лишние математические операции...
Отправляешь по 2048 байт.. блин. Я даже не знаю что посоветовать...
Пробовал отправлять изображение целиком?

Цитата Сообщение от castaway Посмотреть сообщение
Кстати, если заведомо известно что связь стабильная, то есть смысл значительно увеличить MTU.
?
0
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
19.11.2014, 18:58  [ТС] #20
С чего вы взяли что она не получает видео? У платы есть ip, mac и порт, прошиты железно, что бы передать на плату, я забиваю arp таблицу вручную, поэтому для винды все хорошо. Она даже не спрашивает кто это.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2014, 19:08 #21
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
У платы есть ip, mac и порт,
Откуда известно, где физически в сети находится этот mac адрес? Тем более если отппавлять по ip, то сначала посылается запрос, плата отвечает, что это её адрес и ему соответствует такой то mac и уже на этот мак идёт весь трафик для платы. И даже если отправлять на mac, коммутатор не знает, на каком его порту (не ip порту, на разъёме) этот mac сидит, пока с него не придёт хотябы один пакет. То есть пока плата не вышлет исходящий. Поэтому коммутатор, получив mac адрес назначения, равный адресу платы разошлёт пакет сразу всем, без ответа он выдержит максимальную паузу. 1 мегабит из тысячи так легко получить. А 300 из тысячи как? Топить остальную сеть?

Добавлено через 1 минуту
.................
0
castaway
19.11.2014, 19:09
  #22

Не по теме:

WeDZminxxx, не обращай на него внимание. Он не всегда уверен в своих убеждениях.

0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2014, 19:11 #23
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
я забиваю arp таблицу вручную,
Это какой же коммутатор это позволяет?
0
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
19.11.2014, 19:20  [ТС] #24
переменная b - нужна для номера кадра, ее половинки надо поменять местами - узнал это когда пакет wireshar-ком проверил(почему-то при компановке структуры с++ меняет местами половинки)
первый if - для определения последнего пакета, он одним словом отличается от других
второй if на самом деле такой(не помню почему вынес в отдельную переменную)
C++
1
if (send(my_sock, (char*)&rtp[ii * max_kk + kk], (width_1 + 20), 0 ) == SOCKET_ERROR)
Цитата Сообщение от castaway Посмотреть сообщение
Отправляешь по 2048 байт
не совсем понял.
rtp - массив структур packet размером 768*2, каждый элемент (20 + 512) байт, за раз отправляю один элемент массива по номеру ii * max_kk + kk - размером (width_1 + 20), где width_1 = 512

Полное изображение не пробовал(даже когда отправляю строку, а не половину, скорость падает)

Я отправляю 100 кадров, на каждый и колебания времени отправки кадра от 16 - 18 ms, если при этом увеличить mtu на максимум(9KB насколько помню) - то колебания от 15 до 30 ms(среднее 21ms)

Добавлено через 4 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Это какой же коммутатор это позволяет?
Bash
1
2
netsh interface ipv4 add neighbors \"Local Area Connection\" 192.168.1.100 00-23-20-21-22-23
arp -s 192.168.1.100 00-23-20-21-22-23 192.168.1.101
добавят нужные записи в arp таблицу в windows

Можно подробней, про то где находится коммутатор в прямом соединении сетевой карты компьютера и ПЛИС с портом RJ45?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2014, 19:49 #25
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
Изображение в градациях серого, от 0 до 255, что требует 8 бит.
То есть всего 256 градаций.

Добавлено через 5 минут
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
проверил(почему-то при компановке структуры с++ меняет местами половинки)
Не c++, а процессор. Есть разные порядки байт в словах, слов в двойных словах и двойных слов в четверных словах. Кроме того, есть ещё смешанные порядки байт в двойных словах и четверных словах. Процессор использует один порядок, а в протоколе порядок другой.
0
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
19.11.2014, 19:56  [ТС] #26
Цитата Сообщение от taras atavin Посмотреть сообщение
То есть всего 256 градаций.
Да, 8b'00000000 - 0, 8b'11111111 - 255

Добавлено через 6 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
Не c++, а процессор.
Я не разбирался кто именно, просто возникла проблема по которой пришлось менять местами половины слов
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2014, 19:58 #27
Удобные расширения формата tif предназначены специально для того, чтоб вызывать сбои и случайные ошибки прикладных программ.
И одна из проблем в нём именно в том, что он разрешает обо порядка байт. От языка не зависит.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
19.11.2014, 20:31 #28
WeDZminxxx, да, в сети есть свой порядок байт, отличный от разных архитектур, и он всегда одинаковый.

Добавлено через 4 минуты
WeDZminxxx, единственный вариант увеличения производительности я вижу только в коде. Следует оптимизировать именно его.
0
true_bugmaker
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
19.11.2014, 21:10 #29
попробуй zmq или ещё какую-нибудь либу для low latency. http://zeromq.org/area:faq
0
19.11.2014, 21:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 21:10
Привет! Вот еще темы с ответами:

Быстрая сортировка - C++
Воспользовался готовым решением для сортировки: Алгоритмы сортировок в итоге если беру массив: int A = {2,1,4,5,8,7,1,5,2,9} ...

Быстрая сортировка - C++
Помогите, пожалуйста! Не понимаю почему, но при использовании быстрой сортировки программа выдаёт ошибку и не работает. Вообще первый раз...

Быстрая сортировка - C++
Объясните в чем подвох? Выводит какое большое отрицательное числа %) #include <iostream> #include <conio.h> #include <stdlib.h> //...

Быстрая сортировка - C++
Смотрел в тему посвященной быстрой сортировке, и не совсем понял. написал подобный код. Хотелось бы наиболее подробных комментариев, за...


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

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

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