Показать сообщение отдельно
Старый 05.07.2011, 23:27
C4Grey вне форума Посмотреть профиль Отправить личное сообщение для C4Grey Найти все сообщения от C4Grey
  № 13  
Ответить с цитированием
C4Grey

Регистрация: May 2007
Сообщений: 181
Отправить сообщение для C4Grey с помощью ICQ Отправить сообщение для C4Grey с помощью Skype™
Ну, теперь сервер все читает корректно...на досуге надо будет почитать исходники blazeDS, чтобы понять как они парсер написали, но пока более приземленные дела - отправка сообщений.
Увы, просто:
Код:
 amf3Output.writeObject(OutputMessage);
не проходит, клиент выдает ошибку Error #2030: End of File detected. На одном форуме подсмотрел вариант с использованием ByteArrayOutputStream, реализовал у себя:
Код:
objectOut = socket.getOutputStream();
byteBuffer= new ByteArrayOutputStream();
amf3Output.setOutputStream(byteBuffer);
amf3Output.setOutputStream(objectOut);
И отправка:
Код:
amf3Output.writeObject(OutputMessage);
objectOut.write(byteBuffer.toByteArray());
objectOut.flush();
В итоге первое сообщение читалось отлично, последующие - крякозябрами, заметил что количество байт на входе постоянно растет...добавил byteBuffer.reset();, проблема осталась, кроме того клиент выдавал ошибку Error #2006: Index Out of bound при чтении. В итоге решил таким костылем, в цикле передачи:
Код:
byteBuffer = new ByteArrayOutputStream();
amf3Output.setOutputStream(byteBuffer);
amf3Output.writeObject(OutputMessage);
objectOut.write(byteBuffer.toByteArray());
objectOut.flush();
Не знаю, насколько это коректно с точки зрения компилятора Java, но оно хотя бы работает ... если я что-то делаю неверно - поправте пожалуйста.