Array
(
)

Indy tem limite caracteres?

Rengaf
   - 03 abr 2006

Ola pessoal,

estou criando uma aplicação para troca mesangens com componentes Indy.

Quando envio mensagens com uns 1000 caracteres por exemplo, ela chega ao destino com apenas 50. como posso resolver isso??

Também gostaria de uma ajuda na troca arquivos usando componentes INDY.


obs.: Uso IdTCPServer+IdTCPClient


Massuda
   - 03 abr 2006

A princípio, não existe limite de caracteres. Como você está enviando e recebendo as mensagens?


Rengaf
   - 03 abr 2006

Cliente
clienteIndy.WriteBuffer(varRecord, SizeOf(varRecord),True);

Servidor OnExecute
athread.connection.ReadBuffer(VarRecord, sizeof(VarRecord));


Obrigado pela atenção!!


Massuda
   - 03 abr 2006

Imagino que varRecord não seja uma string. Como você definiu esse tipo de dado (record, class, etc) e qual é a definição dele?


Rengaf
   - 03 abr 2006

DadoMSG = record
TipoMSG :String;
ScriptMSG :String;
NumMSG :Smallint;
end;

VarRecord = DadosMSG;

:wink:


Massuda
   - 03 abr 2006

Para entender porque seu record chega incompleto no destino, segue uma pequena explicação sobre strings & records...

A não ser que você esteja usando strings de tamanho fixo (tipo ShortString ou string[]), qualquer variável do tipo string é um ponteiro para uma área de memória onde está o texto da string.

Assim, se você põe 10 ou 10000000 caracteres na string VarRecord.ScriptMSG, o tamanho de VarRecord não muda, pois o texto da string VarRecord.ScriptMSG está em outra área de memória que não necessariamente inclui o VarRecord.

Para poder passar seu record de um programa para outro, você precisa transferir os textos das strings ao invés do ponteiros. Um jeito de fazer isso seria...#Código

//Cliente 
clienteIndy.WriteLn(varRecord.TipoMSG);
clienteIndy.WriteLn(varRecord.ScriptMSG);
clienteIndy.WriteSmallInt(varRecord.NumMSG);

//Servidor OnExecute
VarRecord.TipoMSG := athread.connection.ReadLn;
VarRecord.ScriptMSG := athread.connection.ReadLn;
varRecord.NumMSG := athread.connection.ReadSmallInt;
...esta é a forma mais simples de entender, mas existem formas mais eficientes de fazer isso.