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

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.04.2011, 12:03
jester88 вне форума Посмотреть профиль Отправить личное сообщение для jester88 Найти все сообщения от jester88
  № 11  
Ответить с цитированием
jester88

Регистрация: Mar 2011
Сообщений: 16
Решил подать на отправку в матлабе следующий вектор [0:255], то есть строку чисел от нуля до двухсот пятидесяти пяти. На выходе из AIR получил следующее.
Код AS3:
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—?™š›œžŸ*¡¢£¤¥¦§¨©ª«¬*®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
То, что загвоздка где-то в кодировке, по-моему становится очевидным. Что со всем этим делать не знаю.

Старый 13.04.2011, 12:36
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 12  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Ну так посмотрите спецификацию протокола MatLab.
Вы отправляете набор интов - на выходе преобразовывете в utf - явно видно, что matlab работает с бинарным протоколом.
Кодировка ни причём.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 13.04.2011 в 12:38.
Старый 13.04.2011, 15:11
jester88 вне форума Посмотреть профиль Отправить личное сообщение для jester88 Найти все сообщения от jester88
  № 13  
Ответить с цитированием
jester88

Регистрация: Mar 2011
Сообщений: 16
Любые числа сразу разбиваются на байты еще в матлабе, каждое число представляется в виде строки из некоторого количества байт (8 для "double", 1 для "uint", "boolean" и т.д.) и уже эти байтовые массивы отправляются по сети. Потом принимаем их в ActionScript с помощью readUTFBytes() и получается эта абракадабра, я просто противоречий не вижу, почему не работает. В сеть отсылаются байты, readUTFBytes() работает с байтами, а получается не пойми что.

Старый 13.04.2011, 15:26
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 14  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
вы сами написали, что оправляется не строка, а набор интов, а читаете вы как UTF строку.
читайте как readInt() в цикле, если вы уверены, что это 32 битный int, ну или readShort, readByte(судя по выдаче, это именно он).. почитайте хелп для начала
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 13.04.2011 в 15:30.
Старый 13.04.2011, 15:26
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 15  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
а что за противоречия ? что именно не работает ? как вы парсите полученные данные ?

Старый 13.04.2011, 19:51
jester88 вне форума Посмотреть профиль Отправить личное сообщение для jester88 Найти все сообщения от jester88
  № 16  
Ответить с цитированием
jester88

Регистрация: Mar 2011
Сообщений: 16
Котяра, спасибо. Пойду учить матчасть.

Старый 18.04.2011, 21:11
jester88 вне форума Посмотреть профиль Отправить личное сообщение для jester88 Найти все сообщения от jester88
  № 17  
Ответить с цитированием
jester88

Регистрация: Mar 2011
Сообщений: 16
Числа Integer принимаются на ура. Все сделал как вы сказали:
Код AS3:
for (var i:int = 0; i < event.data.length; i++)
{
trace (event.data.readByte());
}
А как принимать 64-битный Double? Если использовать readDouble() вот так:
Код AS3:
for (var i:int = 0; i < event.data.length; i++)
{
	trace (event.data.readDouble());
}
Появляется следующее сообщение:
Код AS3:
Error: Error #2030: End of file was encountered.
	at flash.utils::ByteArray/readDouble()
	at source::DatagramSocketExample/dataReceived()[G:\flex\air\source\DatagramSocketExample.as:36]

Старый 18.04.2011, 21:39
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 18  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цикл неверный.
В первом случае нормально срабатывает т.к. в каждой итерации ты вычитываешь ровно 1 байт,
В случае с double ты вычитываешь больше чем байт за итерацию и происходит чтение несуществующих данных.
попробуй
Код AS3:
 while(event.data.length>0)
{
trace (event.data.readDouble());
}
__________________
Отряд Котовскага

Старый 19.04.2011, 10:56
jester88 вне форума Посмотреть профиль Отправить личное сообщение для jester88 Найти все сообщения от jester88
  № 19  
Ответить с цитированием
jester88

Регистрация: Mar 2011
Сообщений: 16
Использование такого кода не помогает
Код AS3:
var i:int = event.data.length;
while (i > 0)
{
	trace (event.data.readDouble());
	i--;
}
Все-равно вылезает та же ошибка:
Код AS3:
3.0386519416174186e-319
Error: Error #2030: End of file was encountered.
	at flash.utils::ByteArray/readDouble()
	at source::DatagramSocketExample/dataReceived()[C:\Documents and Settings\tcimbalukGM\Рабочий стол\air\source\DatagramSocketExample.as:75]

Старый 19.04.2011, 11:32
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 20  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Я написал как надо попробовать, а вы опять занялись самодеятельностью
Не понимаете смысла что-ли?
readDouble уменьшает длину буфера сокета на 64 бита(8байт), соответственно, уменьшается его длина (в байтах). Вычитываем до тех пор пока длина не станет нулевой.
или делайте так: (обратите внимание на i+=8)

Код AS3:
var len:int = event.data.length;
for (var i:int = 0; i < len; i+=8)
{
	trace (event.data.readDouble());
}
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 19.04.2011 в 11:51.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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