Просмотр полной версии : Socket+string
RadiationX
25.10.2006, 13:35
1. Есть сокет подключенный к серверу. Сервер отправляет пакет с некоторым количеством строк. Строка завершается 0. Как на AS3 прочитать строки?
2. Для того чтобы отправить строку из AS3 на сервер делаю так:
var s:String = "test";
var b:ByteArray = new ByteArray();
b.endian = Endian.LITTLE_ENDIAN;
b.writeObject(s);
b.writeByte(0);
socket.writeBytes(b);
socket.flush();
Почему в результате перед нулевым символом появляются два байта, каждый раз разные?
MerlinTwi
25.10.2006, 13:48
Если все передается с завершающим нуль-байтом и нет бинарных данных, то почему бы не работать с прежним XMLSocket?
RadiationX
25.10.2006, 13:56
Кроме строки могут быть любые другие данные.
MerlinTwi
25.10.2006, 14:15
Тогда нуль-байт тут вообще не причем. Метод writeObject записывает объект в виде последовательности байтов в формате AMF serialized format.
И для того чтобы корректно читать эту информацию на стороне сервера, не надо изобретать велосипед, а подключить библиотеку понимающую AMF.
Зачем ты пишешь объект? напиши байты по одному.
RadiationX
25.10.2006, 16:59
Попробую сформулировать вопрос по другому:
1. Записать string в socket и завершить нулевым символом
2. Прочитать из socket с определенной позиции string, который завершается нулевым символом
Пункт 1 уже работает, через ByteArray, можно еще попробовать записывать каждый символ отдельно
С пунктом 2 пока не знаю, можно считывать по символу и добавлять к строке.
Кстати в документации сказано, что AS3 использует UTF16 строки (каждый символ по 2 байта). При получении строки, отправленной из AS3, на сервере, можно читать по одному байту и все будет правильно. Почему?
А почему ты не юзаешь writeMultibyte, к примеру?
RadiationX
25.10.2006, 17:44
Проверил writeMultibyte, работает нормально. Остается чтение строки. Есть readMultibyte, но там необходимо указывать длину строки. Наверное придется ее указывать при отправке со стороны сервера.
А bytesAvailable для чего?
Все ответы на вопросы описаны в хелпе, собственно.
RadiationX
25.10.2006, 17:51
А если отправляю целую структуру данных? Несколько различных строк, потом еще что-нибудь.
Ну так посылайте некий байт, который указывает на то, что структура началось здесь и закончилась там. Собирайте всё в одну строку, затем можно парсить структуры.
RadiationX
25.10.2006, 18:20
Вопросов больше нет, спасибо за помощь!
Для отправки строк использую writeMultiByte + записываю нулевой символ, для получения - считываю длину строки, затем readMultiByte.
я шлю длину строки двумя байтами (short), потом строку в UTF-8, и нулевой байт не нужен.
тестировал с джава ByteBuffer работает замечательно.
и шлет и читает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.