|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
отправка картинки через сокет сервер
Хотел бы спросить как правильно отправить картинку через сокет сервер?
есть такие вот наброски: imm.source = "http://.../img10.png"; var ba:ByteArray = new ByteArray() var encoder:JPGEncoder = new JPGEncoder(100); ba = encoder.encode(imm.bitmapData); socket.writeUTFBytes(ba.length.toString()); // нужно передовать длину ? socket.writeBytes(ba,0,ba.length); // правильно тут все ? socket.flush(); просто на сервер иногда приходит просто разноцветная полосочка "аля радуга" или вообще нечего кроме каракуль Добавлено через 1 час 7 минут дошел до того что на сервер приходит куча маленьких битых пнгшек, с чем связано ? |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Покажите код, которым вы на сервере данные читаете. Есть подозрение, что вы вычитываете сообщение не до конца.
На клиенте, похоже, все правильно. Ну при условии, что у вас картинка к моменту отправки на сервер уже загрузилась полностью (у вас в примере ожидания окончания img я не вижу). Если не получается, соберите какой-нибудь простенький пример (клиент+сервер), чтобы его можно было запустить и посмотреть. Давайте именно код, а не скомпилированный результат. |
|
|||||
О_о
Это что? Добавлено через 12 минут 1. длину передавать не надо. Но зависит от серверного парсера. Нужно знать ваш формат протокола чтоб точно ответить. 2. Даже если длину и надо передавать, то это нифига не запись длины в виде строки. 3. Запись в сокет неправильная. // Подготавливаем сообщение. var msg:ByteArray = new ByteArray(); // будущее сообщение var ba:ByteArray = new ByteArray(); // временный буффер в который запишем картинку var encoder:JPGEncoder = new JPGEncoder(100); ba = encoder.encode(imm.bitmapData); // читаем картинку msg.writeInt(ba.length); // если нужно длину указывать. // Если не надо, то и второй байтаррей не нужен, можно прямо в msg записать. // Просто без дополнительного БА - не сможем длину выудить. // Ну и еще один момент - так мы запишем четыре байта длины. // А могут быть варианты с одним байтом или двумя. Опять же от вашего протокола зависит. msg.writeBytes(ba); // тело сообщения msg.writeInt(0x00); // признак конца сообщения. Поидее не нужен, но надо уточнять как сервер парсит. socket.writeBytes(msg); // записываем в сокет. socket.flush(); // отправляем
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
если картинка больше чем 3 кб (3072 байта), то наверно срабатывает какое-то ограничение что его бьет , что это может быть кто знает ? |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
|
|
|||||
Если картинка меньшим размером проходит нормально - то пинай сервер. Косяк там.
А если даже маленькая не парсится - тогда будем разбираться. Надо проконтролировать еще ba.endian у клиента и сервера должны совпадать. Но если не совпадают - то вообще никакое сообщение не прочитается. Так что проверьте сначала на малееньком сообщении.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
ок тогда буду копать в сторону серва |
Часовой пояс GMT +4, время: 15:42. |
|
« Предыдущая тема | Следующая тема » |
|
|