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

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

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

Регистрация: Nov 2008
Сообщений: 2
По умолчанию localconnection data > 255 exe <-> swf

Привет.
Необходимо реализовать обмен данными между exe файлом и флешкой. Проблема в следующем: если написать флешку, назовём client.swf которая отошлёт строку по localconnection(lc) размером более 255 байт, то, если написать флешку, server.swf которая эти данные примёт всё будет ок. Но мне необходимо из exe послать строку более 255 и во флешке её принять. Я взял пример реализации lc на си++, который шлёт чтолибо по lc флешке. Если длина строки будет меньше 256, флеш замечательно всё примет. А если больше, то будет резаться. Строка, по сорсу, ложится так :
Код:
int writeAMFString(const char * str, int pos)
{
	int len = strlen(str);
	buffer[pos++] = 0x02;
	buffer[pos++] = 0; // string length is badly encoded here!
             buffer[pos++] = (char)(len & 0xff);
	
	strcpy((char*)&buffer[pos], str);
	pos += len;
	return pos;
}
Как видими длина данных задаётся одним байтом о_О. Тогда понятно почему данные режутся. Например при длине строки в 257 прилетит тока один символ.
По этой функции, полностью видим протокол lc :
Код:
int writeMessage(const char * msg)
{
	DWORD *timestamp = (DWORD*)&buffer[8];
	DWORD *size = (DWORD*)&buffer[12];
	int pos = 16;
	// check timestamp and size
	if (*size) return 0;
	*timestamp = GetTickCount();
	// write connection name
	pos = writeAMFString(listenerConnectionName, pos);
	// write protocol
	pos = writeAMFString(protocolName, pos);
	// write method name
	pos = writeAMFString(listenerMethod, pos);
	// write message
	printf("size: %d\n", strlen(msg));
	pos = writeAMFString(msg, pos, true);
	*size = pos-16;
	// report
	printf("Written: timestamp=%d, size=%d\n", *timestamp, *size);
	// dump memory
	//dumpMemory(0, *size+16);
	return 1;
}
Вопрос такой, если по протоколу, по крайней мере как он реализован на сях, мы можем послать только 255 байт, как флеш флешу шлёт большИе данные без проблем ?

Кстати, када флеш мне чото слал, у меня тоже всё резалось. Но, забив на байт длины, а рулясь фанкой strcpy, принимаю большие строки без проблем

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

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

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


 


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


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