![]() |
Проблема с UDP обменом между сервером и AIR приложением
Доброго времени суток!
У меня возникла следующая проблема. В локальной сети есть сервер, с которого через UDP передаются некоторые числовые данные. Мне необходимо эти данные принять и обработать в своем AIR приложении. Для прослушивания UDP сервера использую класс DatagramSocket, который позволяет отправлять и получать пакеты UDP. Тут возникает пролема, которую я решить не могу. Мое приложение просто выполняется и совершенно ничего не приоисходит. Я нуб в ActionScript, и прошу совета знающих людей. Код выглядит следующим образом. Код AS3:
|
Непонятна логика работы вашенго класса. И почему биндимся на локалхост?
Разберитесь до конца с примером из хэлпа: Код:
package |
Я понимаю логику работы программы так. Есть два компьютера. Один удаленный, он отсылает в сеть UDP пакеты. Второй - локальный. На локальном компьютере находится AIR приложение, которое по задумке должно принимать пакеты, обрабатывать их и выводить результаты.
Исходя из этого, программа выглядит следующим образом. Создаем объект DatagramSocket, далее подключаемся с помощью метода connect() к удаленному компьютеру (IP="192.1.130.190", Port=50000), отсылающему в сеть пакеты. Далее с помощью метода bind() связываем DatagramSocket с локальным адресом и портом (IP="127.0.0.1", PORT=8989). Я так понял, что локальный адрес - это localhost. Ставим слушатель событий, который следит за тем, приходят ли пакеты на связанный локальный адрес. Если пакеты приходят, то выполняется функция readUDPSocketData, которая по идее должна трейсить, что такие-то данные получены с такого-то адреса и порта. В конце-концов пишем recieve() для активации объекта DatagramSocket, чтобы тот смог получать пакеты на связанный IP-адрес и порт. Я так понимаю, в моей логике где-то содержится epic fail. Укажите на него пожалуйста. P.S. С примером их хелпа разбирался, но тот не работает, выводит ошибку #1009. Но красивости, всякие окошки и поля ввода мне сейчас неинтересны, хочется чтобы просто данные передавались. |
1. Удаленный компьютер вещает пакеты в сеть безадресно? Как организована его работа?
2. Локальный компьютер имеет свой IP-адрес? На него и надо делать бинд, ну, или просто bind(), без параметров. Бинд на локалхост означает, что будут приниматься только пакеты от локальных же приложений. 3. Пример из хелпа вполне рабочий. Более того, он позволяет проверить работу DatagramSocket, даже не имея удаленного компьютера. В этом случае как раз достаточно забиндиться на 127.0.0.1:[port] и слать пакеты на этот же адрес - 127.0.0.1:[port]. У меня под FlashDevelop пример собрался и заработал на раз-два. 4. Где в вашем примере вызываются bind() и connect() вообще не понятно. "красивости", которые вам не интересны, в примере из хелпа - это кнопки и поля ввода? Как раз события от кнопок и запускают тут bind() и connect() и позволяют потестить работу DatagramSocket. Чем они вам не угодили - не ясно. 5. Еще раз повторю: разберитесь с примером доконца. |
Спасибо за ответ, попытаюсь разобраться, просто под Flash Professional этот пример ни за что собираться не хочет.
|
а если не подписываться на ошибки сокета? он про них умолчит или выдаст ?
|
Добрый день! Я разобрался в хелпе, данные сейчас передаются, но возникла очередная загвоздка. UDP сервер, находящийся по адресу 192.1.130.178:55556, отсылает в сеть пакеты на адрес 192.1.130.178:55555. В качестве UDP сервера используется стандартный блок сетевого обмена UDP пакета MATLAB&Simulink. Числовые данные, приходя в мое AIR приложение, превращаются в ничего не говорящие мне символы в виде квадратов. Выглядит это следующим образом.
Код AS3:
Код программы здесь. Код AS3:
|
если попробовать Socket или XMLSocket ?
и что там за протокол у матлаба ? |
Матлаб имеет стандартный UDP протокол, и все числовые транзакции осуществляются именно через него, поэтому Socket и XMLSocket не подходят к сожалению...
|
под протоколом в данном случае подразумевается более высокий уровень. какие данные и в каком виде шлёт матлаб по UDP? скорей всего это какой-то бинарный протокол, который нужно отдельно парсить.
|
| Часовой пояс GMT +4, время: 17:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.