![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Я принимаю данные из сокета. Сокет tcp. Пакеты - JSON объекты, разделённые байтовым нулём (0). Иногда приходят 2 пакета одновременно. Вопрос - как их расклеить? Вот код без расклеивания:
public class Buffer { public var b: String = new String(); public var objects: Vector.<Object> = new Vector.<Object>(); public function Buffer() { } public function full(connection:Socket): Boolean { var str: String = connection.readUTFBytes( connection.bytesAvailable ); try { var obj: Object = JSON.decode(str); objects.push(obj); }catch (error:Error) { trace("Ошибка при разборе строки \"" + str + "\" (" + error.message + ")"); } return true; } public function getObj(): Object { return objects.shift(); } } |
|
|||||
|
Или наоборот -- можно слать символ начала сообщения и его длину.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
А как быстрее: читать поток побайтно через Socket.readByte и потом как-то собирать в пакет или следать сразу Socket.readBytes(ByteArray) и пилить уже массив?
Вообще, может есть у кого готовый код? Я собственно за этим и попросил, а то свой писать то напишу, но до этого наверняка много граблей соберу. |
|
|||||
|
Если вы по сокету передает JSON строку, то может имеет смысл использовать встроенный класс XMLSocket, не?
__________________
http://www.chessmax.ru |
|
|||||
|
.
|
Цитата:
Читайте полностью посылку в буфер. Если не хватает данных, ждите очередной кусок. Как начнет хватать. читайте из буфера всю посылку. Что-то может остаться, будете добавлять в него следующей итерацией. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|