![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
bra1ss |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.7.2010 Репутация: нет Всего: нет |
Имеется внешнее устройство, подключаемое по Ethernet. Принцип управления им следующий: с компа на устройство посылаем UDP-пакет из 8 байт данных определенного вида. В ответ устройство начинает посылать UDP-пакеты с данными, которые нужно обрабатывать. Передача еще одного UDP-пакета из 8 байт данных "выключает" устройство. Для взаимодействия с устройством используется WinSock.
Код инициализации:
Отправка данных на устройство:
Прием данных:
Команда включения уходит на устройство нормально, но функция recvfrom возвращает код ошибки WSAETIMEDOUT. При этом в сниффере я вижу, что UDP-пакеты с данными от устройства исправно сыпятся. Где может быть проблема? |
||||||
|
|||||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
bind на сокет?
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
bra1ss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.7.2010 Репутация: нет Всего: нет |
не помогает
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
Гм. setsockopt должен вызываться до всяких манипуляций с сокетом, то есть сразу после socket. А для теста его лучше закомментарить, или выставить таймаут в минуту и посмотреть, сколько времени требуется recvfrom до WSAETIMEDOUT.
Всё-таки, приведите обновлённый код с bind. На какой порт сыпятся UDP-пакеты с устройства? Это сообщение отредактировал(а) feodorv - 23.12.2011, 11:47 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
bra1ss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.7.2010 Репутация: нет Всего: нет |
Разобрались с приемом, проблема была в прошивке устройства, теперь даже без бинда данные нормально принимаются с кодом выше. Вопрос теперь, как определить/задать порт, с которого комп отправляет команду включения? Именно на него и будут сыпаться пакеты.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
Я, лично, окончательно запутался
![]()
А сейчас-то на каких портах всё это работает? ![]() getsockname Это сообщение отредактировал(а) feodorv - 23.12.2011, 15:09 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
bra1ss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.7.2010 Репутация: нет Всего: нет |
Сейчас я отправляю данные с порта компа номер X на порт устройства, который задаю в m_service.sin_port. Устройство мне отвечает с его порта Х на мой порт Х. И sendto, и recvfrom отрабатывают как надо. Нужно определить X. Спасибо, теперь вроде всё в порядке.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
А, то есть Вам всё равно, с какого порта работать? Тогда другое дело
![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |