Indy tem limite caracteres?

03/04/2006

0

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


Rengaf

Rengaf

Responder

Posts

03/04/2006

Massuda

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


Responder

03/04/2006

Rengaf

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

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


Obrigado pela atenção!!


Responder

03/04/2006

Massuda

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


Responder

03/04/2006

Rengaf

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

VarRecord = DadosMSG;

:wink:


Responder

03/04/2006

Massuda

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...
//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.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar