Hatory 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба Всем добрый вечер. Помогите разобраться со странной проблемой: На отладочной плате Stratix II GX PCIe собрали систему с модулем triple speed ethernet, для программной части для Nios был взят драйвер vadimuzzz'а + дописана реализация протокола UDP. Ping успешно проходит. Пакеты UDP от ПК в ПЛИС приходят, ответные пакеты видны в Wireshark, но приложение на ПК их не получает. При просмотре статистики сетевых протоколов видно, что все принимаемые пакеты с "ошибками при получении" всем откликнувшимся заранее большое спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба ...При просмотре статистики сетевых протоколов видно, что все принимаемые пакеты с "ошибками при получении"... А где в Wireshark-е это видно? Может, просто нужно утихомирить firewall? Выложите в эту тему в архиве лог Wireshark-а ("Test.pcapng") при обмене несколькими UDP-пакетами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hatory 0 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Спасибо за участие. "Ошибки при передаче" отображаются не в Wireshark'е, а при использовании команды netstat. Брандмауэр отключен. Пробовала запускать на разных ОС (windows xp sp3 и windows 7) - ситуация та же. Test.pcapng.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olegras 0 21 января, 2014 Опубликовано 21 января, 2014 (изменено) · Жалоба У Вас статистика говорит "Получено датаграмм - 73, Ошибки при получении - 1". Так приложение ПК не получает все пакеты или только некоторые? В тестовом файле только две UDP датаграммы 1.1 -> 1.5. Сколько реально было передано? Изменено 21 января, 2014 пользователем olegras Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Винда лупит с разных портов огромными пакетами. Для udp это не гуд... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hatory 0 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Перед запуском приложения на ПК ввожу команду netstat -s -p UDP 5 выводится следующее: Статистика UDP для IPv4 Получено датаграм = 321 Отсутствие портов = 42 Ошибки при получении = 2 Отправлено датаграмм = 359 Запускаю приложение, которое в цикле отправляет несколько байт данных и ожидает пакет с 1024 байтами. Приложение зависает на приеме. Тем временем в командной строке выводится обновленная информация: Статистика UDP для IPv4 Получено датаграм = 321 Отсутствие портов = 42 Ошибки при получении = 3 Отправлено датаграмм = 360 В тестовом файле приведена полная информация об обмене данными между ПЛИС и ПК в результате ping и двух запусков приложения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Запускаю приложение, которое в цикле отправляет несколько байт данных и ожидает пакет с 1024 байтами. У вас приложение что, в каждой итерации цикла биндится к другому порту??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hatory 0 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба У вас приложение что, в каждой итерации цикла биндится к другому порту??? Нет, в тестовом файле приведен результат двух запусков приложения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Я бы уменьшил размер пакета. 1024 для udp - многовато. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hatory 0 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Я пробовала и 50, и 80, и 256 байт - всё тоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Ну тогда показывайте кусок проги, относящийся к socket/bind(хотя его у вас нет)/recv/recvfrom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hatory 0 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Основной код: SOCKET Socket; char ServerAddress [100] = "192.168.1.1"; sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr(ServerAddress); if (service.sin_addr.s_addr == INADDR_NONE) { MessageBox (hwndMain, _T("Bad server address"), _T("Socket error!"), 0); ExitProcess (-1); } service.sin_port = htons(0x1010); //---------------------- // Connect to server. while (1) { Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (Socket == INVALID_SOCKET) { MessageBox (hwndMain, _T("Error at socket(): %ld\n"), _T("Socket error"), 0); return -1; } if ( connect( Socket, (sockaddr *) &service, sizeof(service) ) == SOCKET_ERROR) { Sleep (100); } else { while (1) { int ReadCount = 0; char writebuf[10]; for (int i = 0; i < 128; i++) { writebuf[0] = 0x31; writebuf[1] = 0x66; writebuf[2] = i + 1; if (sendto (Socket, writebuf, 3, 0, NULL, NULL) == SOCKET_ERROR) { return; } int ReadWait = ((i + 1) << 10) - ReadCount; ReadCount += recvfrom (Socket, &((char *)Buffer)[ReadCount], ReadWait, 0, NULL, NULL); if (ReadWait > 16000) { Sleep (5); } } } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Ой! Откуда connect на udp????? Может таки почитаете азы socket API? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olegras 0 21 января, 2014 Опубликовано 21 января, 2014 (изменено) · Жалоба wireshark видит принимаемые датаграммы, а приложение не видит. Скорее дело в приложении. Что возвращает connect() ? Изменено 21 января, 2014 пользователем olegras Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosu-art 0 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Я тут мерил скорость по UDP от ниоса. Может поможет. udp3Dlg.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться