![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
C4Grey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.5.2007 Репутация: нет Всего: 1 |
Приветствую.
Пытаюсь отправить объект на Java-сервер. Со стандартными типами работает нормально, но с классами начинаются проблемы. Класс сериализирован(и в Java, и в AS), клиент на Java успешно отправляет объект, сервер принимает. При отправке же объекта с Flash-клиента получаю на сервере ошибку: java.io.StreamCorruptedException: invalid stream header: 0A071744 Ошибку получаю при попытке создания входного потока:
Подскажите, пожалуйста, в чем может быть проблема. |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: нет Всего: 48 |
В вашем случае лучше использовать сериализацию в XML, я думаю.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Вместо своих велосипедов используй BlazeDS.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
C4Grey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.5.2007 Репутация: нет Всего: 1 |
Спасибо за советы, но цель именно в том, чтобы разобратся в пересылке объектов в связке Flash <-> Javа, посредством, так сказать, педалей родного велосипеда.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Ну тогда начни с того, что разберись с тем как работает сериализация в Java и в Flex (подсказка: они работают по разному и несовместимы между собой). А затем реши какая тебе больше нравится, и допиливай противоположную сторону. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
C4Grey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.5.2007 Репутация: нет Всего: 1 |
Ясно, спасибо за ответы.
|
|||
|
||||
C4Grey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.5.2007 Репутация: нет Всего: 1 |
По твоему совету почитал несколько статей о сериализаций AMF - объектов, также скачал BlazeDS, погуглил примеры чтения объектов...все сводится к тому же:
Но ошибка-то у меня именно в создании экземпляра ObjectInputStream, при чтении заголовка: java.io.StreamCorruptedException: invalid stream header: 0A071744 at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) У BlazeDS есть какие-то аналоги классов потоков и сокетов? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
BlazeDS сериализует объекты в AMF формат. На стороне Java для сериализации/десериализации используются Amf3Output/Amf3Input классы. Со стороны Flex - IDataInput.readObject()/IDataOutput.writeObject().
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
C4Grey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.5.2007 Репутация: нет Всего: 1 |
Да, я уже понял, я сглупил и не тот параметр в качестве входного потока ему выдавал, спасибо.
У меня теперь новая проблема - сервер не может найти класс для десириализации: flex.messaging.MessageException: Cannot create class of type 'DataMessage'. Type 'DataMessage' not found. Это исключение получаю при попытке прочесть объект( amf3Input.readObject() ). От blazeDS импользую только 2 файла: flex-messaging-common.jar и flex-messaging-core.jar, вво флешке пропсиано [RemoteClass(alias="DataMessage")] и есть регистрация: registerClassAlias("DataMessage", DataMessage);, нужный класс в пакете сервера на Java тоже есть, называется так же, поля те же. P.S. Уже разобрался, во флеше надо было добавить название пакета в registerClassAlias. Это сообщение отредактировал(а) C4Grey - 5.7.2011, 19:56 |
|||
|
||||
C4Grey |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.5.2007 Репутация: нет Всего: 1 |
Ну, теперь сервер все читает корректно...на досуге надо будет почитать исходники blazeDS, чтобы понять как они парсер написали, но пока более приземленные дела - отправка сообщений.
Увы, просто:
не проходит, клиент выдает ошибку Error #2030: End of File detected. На одном форуме подсмотрел вариант с использованием ByteArrayOutputStream, реализовал у себя:
И отправка:
В итоге первое сообщение читалось отлично, последующие - крякозябрами, заметил что количество байт на входе постоянно растет...добавил byteBuffer.reset();, проблема осталась, кроме того клиент выдавал ошибку Error #2006: Index Out of bound при чтении. В итоге решил таким костылем, в цикле передачи:
Не знаю, насколько это коректно с точки зрения компилятора Java, но оно хотя бы работает ![]() |
||||||||
|
|||||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
AMF добавляет в начало потока служебную информацию: заголовок, номер версии AMF и т.п. В конец тоже может добавляться информация о конце потока (не уверен насчет AMF, но Java сериализация так делает).
Если уж тебе так хочется написать свой велосипед, то возьми технологию сериализации которая изначально предназначена для самостоятельного использования, например Google Orotocol Buffers. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
C4Grey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.5.2007 Репутация: нет Всего: 1 |
Да с сериализцией все нормально, спасибо тебе за объяснения, теперь разбираюсь со скоростью передачи данных...Раньше делал на UDP(RTMFP), данные передавались между двумя флешками - передавал координаты курсора - скорость была просто-таки идеальной(движение мыши отрисовывалось почти синхронно), с ТСР же начались проблемы. Передача данных на сервер еще более-менее, но вот прием медленный, иногда пакеты теряются, из-за чего движение получается дерганным. В серьезных игрушках используют хитрые алгоритмы синхронизации, сервер отсылает сообщения не сразу, а как-то буферизируя данные...но до такой магии мне еще далеко. Можешь что-то посоветовать, какой-то конкретный алгоритм, подход?
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
ТСР это гарантированная доставка. Если ты передаешь координаты мыши и если старое значение координат не дошло, то и не стоит его повторно передавать. Лучше передать новое значение.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: нет Всего: 22 |
Советую скачать GraniteDS - у них как-то все понятнее в исходниках, чем у BlazeDS. Да и с кометом у них как-то получше (когда перешел - свято верил, сейчас затрудняюсь сказать в чем).
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |