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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

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

Регистрация: Jan 2011
Сообщений: 247
По умолчанию отправка картинки через сокет сервер

Хотел бы спросить как правильно отправить картинку через сокет сервер?
есть такие вот наброски:
Код AS3:
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 минут
дошел до того что на сервер приходит куча маленьких битых пнгшек, с чем связано ?

Старый 29.10.2013, 13:17
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Покажите код, которым вы на сервере данные читаете. Есть подозрение, что вы вычитываете сообщение не до конца.

На клиенте, похоже, все правильно. Ну при условии, что у вас картинка к моменту отправки на сервер уже загрузилась полностью (у вас в примере ожидания окончания img я не вижу).

Если не получается, соберите какой-нибудь простенький пример (клиент+сервер), чтобы его можно было запустить и посмотреть. Давайте именно код, а не скомпилированный результат.

Старый 29.10.2013, 14:34
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 3  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
Код AS3:
socket.writeUTFBytes(ba.length.toString());
О_о
Это что?

Добавлено через 12 минут
1. длину передавать не надо. Но зависит от серверного парсера. Нужно знать ваш формат протокола чтоб точно ответить.
2. Даже если длину и надо передавать, то это нифига не запись длины в виде строки.
3. Запись в сокет неправильная.

Код AS3:
// Подготавливаем сообщение.
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(); // отправляем
RTFM
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 29.10.2013, 15:26
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 4  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
Код AS3:
// Подготавливаем сообщение.
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(); // отправляем
Спасибо большое на шаг ближе к цели стал, да пока длину некуда присвоить по идеи если сокет видит биты идущие к нему он не ограничивает длину а ждет конца потока, ну все равно есть кокой-то баг с разбитием файла, объясню:
если картинка больше чем 3 кб (3072 байта), то наверно срабатывает какое-то ограничение что его бьет , что это может быть кто знает ?

Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
Нужно знать ваш формат протокола чтоб точно ответить.
Код AS3:
socket_create(AF_INET, SOCK_STREAM, SOL_TCP)

Старый 29.10.2013, 15:30
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 5  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
на каком языке сервер?
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 29.10.2013, 15:39
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 6  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
на каком языке сервер?
сервер на php

Старый 29.10.2013, 15:44
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 7  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Если картинка меньшим размером проходит нормально - то пинай сервер. Косяк там.
А если даже маленькая не парсится - тогда будем разбираться.
Надо проконтролировать еще ba.endian у клиента и сервера должны совпадать.
Но если не совпадают - то вообще никакое сообщение не прочитается. Так что проверьте сначала на малееньком сообщении.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 29.10.2013, 16:54
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 8  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
Если картинка меньшим размером проходит нормально - то пинай сервер. Косяк там.
А если даже маленькая не парсится - тогда будем разбираться.
Надо проконтролировать еще ba.endian у клиента и сервера должны совпадать.
Но если не совпадают - то вообще никакое сообщение не прочитается. Так что проверьте сначала на малееньком сообщении.
До 3 кб проходит нормально,ba.endian одинаковый (вариант с распаковкой потока был в предыдущей версии попытки поймать файл тут в этой функции можно переключать big Endian сейчас же просто создается пустой файл на сервере и в него ложится те данные которые присылаю, изза того что он(поток) разбит на части, то и файлов создается столько сколько частей ).
ок тогда буду копать в сторону серва

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

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

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


 


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


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