|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.01.2018, 17:02 | #1 |
Форумчанин
Регистрация: 04.01.2010
Сообщений: 229
|
Отправка и принятие UDP пакетов
Добрый день. Суть программы: она отправляет udp пакет (каждый раз случайная длина пакета в определенном диапазоне, и случайное заполнение) на устройство, это устройства пересылает точно такой же пакет назад на комп, естественно поменяв маки местами и ip, ну и подправив порт, и поставив чек сумму в udp части в 0. Задача программы на C# считать количество принятых пакетов без ошибок (то есть рандомное заполнение осталось такое же), количество с ошибками, и количество потерянных пакетов. По сути тестирование.
Код:
Тут в коде я повесил тестовую переменную на таймер1, и типо когда он сработает переменная увеличится. И выведется в тестовое поле, с помощью таймера статистики. Так вот, эта переменная test всегда в нуле при этой ситуации, но при это в другое поле я выводил состояние таймера - и он включен. И еще один важный момент. Если включить программу при отключенном устройстве, и запустить тест, то все работает ) то есть таймер1 срабатывает, вызывает send(), send включает таймер, таймер срабатывает и так по кругу. Включу устройство все опять работает, он нормально считает пакеты, принимает, но вот если во время нормального приема отключить сеть, то опять виснет как описано выше. Что за хрень я не пойму.. Помогите люди добрые )) ------------------------------------------ Дополнение: Сеть и комп находятся в общей сети, и от сети отключаю устройство, комп остается в сети. Последний раз редактировалось Qaliti; 19.01.2018 в 17:17. |
22.01.2018, 17:30 | #2 |
Форумчанин
Регистрация: 04.01.2010
Сообщений: 229
|
ап.. все еще не удалось решить проблему
|
22.01.2018, 18:49 | #3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Send тоже в отдельный поток выделить или использовать асинхронные сокеты BeginSend и всё такое.
|
23.01.2018, 16:43 | #4 |
Форумчанин
Регистрация: 04.01.2010
Сообщений: 229
|
Пробовал оба варианта, и одновременно. Не получилось. Включил и второй поток на отправку, и использовал и BeginSend, и SendAsync с async/await, и прием сменил на асинхронный BeginRecive. И нефига, все равно глюк с тем что таймер был включен но тик не вызывался по истечению времени. Подумал куда уже тут поточнее, ну вот никак мешать срабатыванию таймера ничего не может. И стал копать под таймер.
Взял таймер из класса Threading. Код:
Пишу, вдруг тоже кто столкнется с такой проблемой, ну и может кто объяснит почему такое было, интересно все же. Я в потоках не особо разбираюсь, но возможно связанный с ними трабл был. Таймер из System.Windows.Forms который был, привязывается к потоку создателя, а таймер из Threading использует свой поток. Значит можно предположить что поток создателя был занят всегда, но это не так, все было раскинуто по потокам и все функции асинхронны, ну никак ни что не могло стопать поток создателя. В этом и непонятки |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Scapy отправка Http и UDP пакетов | shaman1 | Помощь студентам | 3 | 24.04.2013 14:19 |
Просмотр UDP пакетов и повторная отправка | grafgrial | Работа с сетью в Delphi | 9 | 25.07.2012 17:24 |
отправка/принятие данных с порта. | romank26 | Win Api | 1 | 26.03.2012 12:51 |
перехват TCP и UDP пакетов | prog.delphin | Работа с сетью в Delphi | 4 | 31.03.2010 13:21 |
Отправка/Принятие почты через потоки... | Vol666 | Работа с сетью в Delphi | 0 | 13.09.2009 15:22 |