Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.09.2015, 18:53
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 1  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
По умолчанию Алгоритм обработки пакета

Всем привет. Возник такой вопрос, вообще он возник уже прилично давно, но в то время я еще не особо разобрался с тем, над чем предстояло работать, сейчас более менее стал понимать. В общем клиенту от сервера передается поток данных в виде типа(short) длина(int) и само сообщение. Я читаю сначала длину пакета, а потом тип пакета. Вообще проблема состояла в том, что буффер переполнялся и не очищался. Данная проблема так и не была решена. Приходит сообщение:
var buffer:ByteArray;
buffer.length - 212 - это общая длина.
length - 99 - это длина сообщения, которая получается при readInt()
type - 7 - это тип сообщения, который получается при readShort()

Общее количество байт от int + short равно 6, т.к short = 2 байтам, а int = 4. Но buffer.length 212 получается, должно быть 105. Стало быть объединились два потока в один. Считывается в сообщение последний поток, другой же остается висеть в буфере и не очищается соответственно. И вот тут возникает вопрос, как собственно мне дочитать то, что осталось в буфере? Вернее как определить, что сообщение оставшееся в буфере полное? При последующих сообщениях, буфер начинает переполняться. Пакеты склеиваются непосредственно дойдя до клиента, сервер посылает 101 и 99 + 12 байт(т.к 2 сообщения), эти 212 и получаются.


Последний раз редактировалось Godwarlock; 05.09.2015 в 20:49.
Старый 05.09.2015, 23:02
botbot вне форума Посмотреть профиль Отправить личное сообщение для botbot Найти все сообщения от botbot
  № 2  
Ответить с цитированием
botbot

Регистрация: Feb 2011
Сообщений: 100
Склейка пакетов это нормальная ситуация, вы сами должны складывать всё что принимаете в отдельный временный буфер, и вытаскивать из него пакеты по мере их готовности. Теоретически возможна как склейка, так и разбивка пакетов. Если надо что-то готовое, гуглите по словам frame decoder.
Ну и short емнип иногда 2 а иногда 4 байта, зависит от архитектуры, хотя может с си путаю.

Старый 06.09.2015, 00:19
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 3  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Не без чуда, у меня всё таки это получилось! Теперь всё хорошо обрабатывается и приходит.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.