Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по приёму Ethernet в РС
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
_Anatoliy
Есть самодельный девайс который связан с РС кабелем гигабитного эзернета,протокол UDP. РС отсылает девайсу команду "старт" и девайс начинает отправлять в РС пакеты с данными пока не придёт команда "стоп". Минимальный интервал между отсылаемыми пакетами - 1мс, максимальный интервал не определён - пакеты отсылаются по мере накопления данных. Наш программист в ступоре, он привык работать в режиме запрос-ответ с применением поллинга. Можно ли выполнить такой алгоритм на РС?
1113
замените программиста
_Anatoliy
Цитата(1113 @ Sep 17 2016, 11:51) *
замените программиста

Это нереально.А по сути что нибудь можете посоветовать? Как без поллинга узнать что нужный пакет пришёл?
1113
вам нужно с поллингом или без поллинга?
насколько мне представляется механизм сокетов, ваше приложение может периодически обращаться к приёмному буферу и по ответу видеть - есть пакеты или нет пакетов. как часто это делать - ваше дело. хоть раз в час, если размер приёмного буфера PC позволяет накапливать данные за это время
_Anatoliy
Цитата(1113 @ Sep 17 2016, 12:06) *
вам нужно с поллингом или без поллинга?
насколько мне представляется механизм сокетов, ваше приложение может периодически обращаться к приёмному буферу и по ответу видеть - есть пакеты или нет пакетов. как часто это делать - ваше дело. хоть раз в час, если размер приёмного буфера PC позволяет накапливать данные за это время

Спасибо! Т.е. ничего неестественного в таком алгоритме нет? Интересно, а как долго принятые пакеты могут находиться в приёмном буфере РС без обработки? Меня бы очень устроило забирать из буфера все пришедшие пакеты сразу с интервалом в 1 секунду. Так можно сделать?
1113
раз в секунду - это не то время, о котором нужно беспокоиться
_Anatoliy
Цитата(1113 @ Sep 17 2016, 12:22) *
раз в секунду - это не то время, о котором нужно беспокоиться

А можете чуть развернуть тему? Значит без обработки принятые пакеты будут спокойно лежать во входном буфере пока программа их не заберёт? Я же не программист РС и этих нюансов не знаю.
1113
да
blackfin
Цитата(_Anatoliy @ Sep 17 2016, 12:04) *
Как без поллинга узнать что нужный пакет пришёл?

Использовать GetOverlappedResult.
_Anatoliy
Цитата(1113 @ Sep 17 2016, 12:34) *
да

Спасибо! Значит в понедельник буду напрягать программиста.
beer.gif
p.s. Вы такой разговорчивый...

Цитата(blackfin @ Sep 17 2016, 12:37) *
Использовать GetOverlappedResult.

Спасибо за направление! Но эта функция вроде работает с файлами, или нет?
blackfin
Цитата(_Anatoliy @ Sep 17 2016, 12:54) *
Спасибо за направление! Но эта функция вроде работает с файлами, или нет?

Вашему программисту следует почитать документацию на Winsock2.
_Anatoliy
Всем большое спасибо за помощь!
Lmx2315
Советую посмотреть на python , я вооооообще в программировании не волоку , но интереса ради и от скуки , лёжа в больнице за полчаса (потому что тормоз) сделал по примерам из инета клиент - сервер приложение, UDP обмен без запросов, а прям как вам надо.
Вроде что-то похожее на это : http://snakeproject.ru/rubric/article.php?...k_server_client

https://habrahabr.ru/post/149077/
_Anatoliy
Цитата(Lmx2315 @ Sep 17 2016, 17:49) *

Да, python вещь хорошая, но это совсем другая история.
kolobok0
Цитата(_Anatoliy @ Sep 19 2016, 09:12) *
...другая история.


под форточками можно как угодно. Если ему нравится поллинг - пускай делает _beginthread(...) и поллит в отдельном потоке. Правда 100% процессорного времени будет жрать. Если, как тут уже прозвучало выше,
сделать нормальный вэйтинг (в этом отдельном потоке) на WSA событийном хэндлере сокета, то и будет дёргаться лишь в тот момент когда что то свалилось из сети. Далее тупое чтение и разбор. ну понятно что механизм масштабирования
сразу заводим, автомат разбора и анализа загрузки - чтоб оно само подстраивалось под нагрузку.

короче говоря - программисту учиться.
Можно начать с Рихтора "Windows для профессионалов" плюс МСДН. Разделы синхронизации, объекты ядра. А МСДН - сокеты, оверлапед режим.

(круглый)
Alex11
Еще надо обратить внимание на размер буфера. По умолчанию он небольшой, но при создании сокета можно указать требуемый размер, чтобы Вам хватило на секунду приема данных.
_Anatoliy
Цитата(Alex11 @ Sep 20 2016, 14:03) *
Еще надо обратить внимание на размер буфера. По умолчанию он небольшой, но при создании сокета можно указать требуемый размер, чтобы Вам хватило на секунду приема данных.

Спасибо за эти тонкости,передам программисту.
gosha-z
А я слепой, или ТС не сказал слова Windows?
_Anatoliy
Цитата(gosha-z @ Sep 21 2016, 13:57) *
А я слепой, или ТС не сказал слова Windows?

Виноват,ключевое слово Windows.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.