Знакомый исходник

.
Ну, по LocalConnection больше 40960 байт не передашь.
А чтоб не резалось можно делать так:

Код:
int writeAMFString(char * str, int pos, char* buffer){
WORD len = (WORD)strlen(str);
buffer[pos++] = 0x02;
// Согласно спецификации AMF 0x02 означает строковый тип передаваемых данных
buffer[pos++] = HIBYTE(len);
buffer[pos++] = LOBYTE(len);
lstrcpy((char*)&buffer[pos], str);
pos += len;
return pos;
}

Код:
int getInfo(char* item, char* buffer, int pos)
{
WORD* llen;
char lenbuf[2];
lenbuf[0]=buffer[pos];
lenbuf[1]=buffer[pos-1];
llen=(WORD*)&lenbuf[0];
memcpy(item, &buffer[pos+1], *llen);
item[*llen] = 0;
pos += 1+(int)*llen+2;
return pos;
}
int readMessage(char* buffer)
{
int res = 0;
DWORD* timestamp = (DWORD*)&buffer[8];
DWORD *size = (DWORD*)&buffer[12];
// если размер нулевой - значит либо сообщение уже прочитано, либо некорректно отправлено, скажем, на несущ. коннект
if (!(*size))return res;
// имена метода(method), домена(domain), соединения(dest) и сообщение (msg).
char msg[40960];
char dest[256];
char method[256];
char domain[256];
int index = 16+2;
index = getInfo((char*)&dest, buffer, index);
index = getInfo((char*)&domain, buffer, index);
index = getInfo((char*)&method, buffer, index);
index = getInfo((char*)&msg, buffer, index);
// buffer содержит начальный адрес расшаренной через FileMapping памяти
// разобрали буфер, дальше идут действия на
//оcнове полученной инфы, res будет каким-то ...
// ...
return res;
}
readMessage можно допилить, оснастив динамическим выделением памяти, или работать прямо с буфером по индексам.
А работает LC по протоколу AMF.