Привет.
Необходимо реализовать обмен данными между 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, принимаю большие строки без проблем
