реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблема с Ethernet, Ping, но не UDP
Hatory
сообщение Jan 20 2014, 17:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-06-11
Из: Казань
Пользователь №: 65 974



Всем добрый вечер.

Помогите разобраться со странной проблемой:
На отладочной плате Stratix II GX PCIe собрали систему с модулем triple speed ethernet, для программной части
для Nios был взят драйвер vadimuzzz'а + дописана реализация протокола UDP. Ping успешно проходит. Пакеты
UDP от ПК в ПЛИС приходят, ответные пакеты видны в Wireshark, но приложение на ПК их не получает. При
просмотре статистики сетевых протоколов видно, что все принимаемые пакеты с "ошибками при получении"




всем откликнувшимся заранее большое спасибо!
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Jan 20 2014, 20:10
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Hatory @ Jan 20 2014, 20:59) *
...При просмотре статистики сетевых протоколов видно, что все принимаемые пакеты с "ошибками при получении"...

А где в Wireshark-е это видно? Может, просто нужно утихомирить firewall?
Выложите в эту тему в архиве лог Wireshark-а ("Test.pcapng") при обмене несколькими UDP-пакетами.
Go to the top of the page
 
+Quote Post
Hatory
сообщение Jan 21 2014, 05:29
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-06-11
Из: Казань
Пользователь №: 65 974



Спасибо за участие.

"Ошибки при передаче" отображаются не в Wireshark'е, а при использовании команды netstat. Брандмауэр отключен. Пробовала запускать на разных ОС (windows xp sp3 и windows 7) - ситуация та же.
Прикрепленные файлы
Прикрепленный файл  Test.pcapng.7z ( 432 байт ) Кол-во скачиваний: 8
 
Go to the top of the page
 
+Quote Post
olegras
сообщение Jan 21 2014, 06:27
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 113
Регистрация: 12-03-07
Пользователь №: 26 075



У Вас статистика говорит "Получено датаграмм - 73, Ошибки при получении - 1". Так приложение ПК не получает все пакеты или только некоторые? В тестовом файле только две UDP датаграммы 1.1 -> 1.5. Сколько реально было передано?

Сообщение отредактировал olegras - Jan 21 2014, 06:32
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 21 2014, 06:54
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Винда лупит с разных портов огромными пакетами. Для udp это не гуд...
Go to the top of the page
 
+Quote Post
Hatory
сообщение Jan 21 2014, 07:00
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-06-11
Из: Казань
Пользователь №: 65 974



Перед запуском приложения на ПК ввожу команду netstat -s -p UDP 5
выводится следующее:

Статистика UDP для IPv4
Получено датаграм = 321
Отсутствие портов = 42
Ошибки при получении = 2
Отправлено датаграмм = 359

Запускаю приложение, которое в цикле отправляет несколько байт данных и ожидает пакет с 1024 байтами. Приложение зависает на приеме.
Тем временем в командной строке выводится обновленная информация:

Статистика UDP для IPv4
Получено датаграм = 321
Отсутствие портов = 42
Ошибки при получении = 3
Отправлено датаграмм = 360

В тестовом файле приведена полная информация об обмене данными между ПЛИС и ПК в результате ping и двух запусков приложения.
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 21 2014, 07:05
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Цитата(Hatory @ Jan 21 2014, 11:00) *
Запускаю приложение, которое в цикле отправляет несколько байт данных и ожидает пакет с 1024 байтами.

У вас приложение что, в каждой итерации цикла биндится к другому порту???
Go to the top of the page
 
+Quote Post
Hatory
сообщение Jan 21 2014, 07:07
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-06-11
Из: Казань
Пользователь №: 65 974



Цитата(gosha-z @ Jan 21 2014, 10:05) *
У вас приложение что, в каждой итерации цикла биндится к другому порту???

Нет, в тестовом файле приведен результат двух запусков приложения.
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 21 2014, 07:15
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Я бы уменьшил размер пакета. 1024 для udp - многовато.
Go to the top of the page
 
+Quote Post
Hatory
сообщение Jan 21 2014, 07:18
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-06-11
Из: Казань
Пользователь №: 65 974



Я пробовала и 50, и 80, и 256 байт - всё тоже.
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 21 2014, 07:20
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Ну тогда показывайте кусок проги, относящийся к socket/bind(хотя его у вас нет)/recv/recvfrom
Go to the top of the page
 
+Quote Post
Hatory
сообщение Jan 21 2014, 07:35
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-06-11
Из: Казань
Пользователь №: 65 974



Основной код:

CODE
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);
}
}
}
}
}
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 21 2014, 07:40
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Ой! Откуда connect на udp????? Может таки почитаете азы socket API?
Go to the top of the page
 
+Quote Post
olegras
сообщение Jan 21 2014, 07:40
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 113
Регистрация: 12-03-07
Пользователь №: 26 075



wireshark видит принимаемые датаграммы, а приложение не видит. Скорее дело в приложении. Что возвращает connect() ?

Сообщение отредактировал olegras - Jan 21 2014, 07:45
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Jan 21 2014, 07:52
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Я тут мерил скорость по UDP от ниоса. Может поможет.
Прикрепленный файл  udp3Dlg.rar ( 3.25 килобайт ) Кол-во скачиваний: 66
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016