![]() |
как пользоваться byteArray.readInt()?
собственно вопрос в заголовке... у меня есть byteArray, в нем числа, если я читаю из него 4 байта в другой byteArray, а потом тот byteArray читаю методом readInt, то получается, а если я из исходного массива просто несколько раз вызываю readInt, то первое число читается, а потом какая-то фигня идет дальше... такое ощущение что он сдвигает поинтер не на 4 байта
|
Так и читается.
Код AS3:
|
очень сложно написал, напишите мне кодом просто чтоб я понял... в строке идет 2 пропуска строки, потом идут 4 инта, как это прочитать?
Добавлено через 1 минуту Цитата:
Добавлено через 3 минуты когда я делаю readBytes(x, offset), то offset такое ощущение что не сначала "сдвигает" окно, а сконца |
Вот пример:
Код AS3:
Добавлено через 48 секунд Цитата:
|
в сокет приходит сначала 2 перевода каретки, потом 16-тиричное число, а потом нужные мне байты
|
Перевод каретки виндовый или юниксовый? В первом случае это 2 байта, во втором 1 на один перевод каретки.
Код AS3:
|
можно как-нибуть во flashDevelop посмотреть структуру массива который приходит на сокет? или надо на угад парсить? я даже не знаю какой там endian
|
endian посмотреть можно, поставив брейкпоинт и глянув в дебаггере. А вот содержимое, к сожалению, нет. Самого это несколько разочаровывало, приходилось наугад и трейсами.
|
трейсом байты не выводятся =)
|
Написать трейсилку байтаррея на полчаса с перекуром задачка.
|
похоже сервер не правильно присылает, потому что я протрейсил длину массива и там очевидно не хватает байтов =)
|
Ну, в общем-то там и не обязательно должны быть ВСЕ байты. Потому как по сети информация передается пакетами, размер которых определяется пройденными по пути маршрутизаторами.
То есть если Вам отправили 100 байт, это значит что вам может прийти: - 2 по 50 - 1 по 100 - 2 по 25 + 1 по 50 Для того чтобы удостовериться в целостности сообщения, как правило, записывают длину сообщения в его первые 2 байта. А на принимающей стороне принимаем 2 байта, читаем их (получаем ожидаемую длину) и ждем пока придет столько, сколько указано в длине. |
у меня обмен идет через tcp соединение, а не через udp
|
Есть замечательная программа, практически обязательный инструмет любого веб-разработчика - Wireshark. :P Показывает всю возможную информации о том что и куда пересылалось по сети. А еще и бесплатно!
|
да я уже поставил =) но поскольку косяк не с моей стороны я особо не стал заморачиваться, жду пока пацаны поправят серверсайд
|
gloomyBrain пишет именно про tcp, про Socket, как уже не раз писали, это поток (XMLSocket по-моему сам склеивает, использует 0 байт как разделитель как альтернативу "записывают длину сообщения в его первые 2 байта"). В udp по-моему как раз есть пакеты, т.е. отосланное не может побиться.
|
TCP — это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в достоверности получаемых данных, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета (см. также T/TCP). В отличие от UDP гарантирует целостность передаваемых данных и уведомление отправителя о результатах передачи.
http://ru.wikipedia.org/wiki/TCP |
Но гарантий, что данные придут одним куском - нет. Ещё раз, интерфейс tcp socket - это поток. Что это может означать - gloomyBrain хорошо описал. Все нормальные сетевики это знают, спорить смысла нет, можно не верить, конечно)
|
Цитата:
Короче, если разберетесь, то вот: Код AS3:
|
| Часовой пояс GMT +4, время: 02:51. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.