Stack Overflow em Português Asked by Tonico Bittencourt on January 12, 2021
Caros,
estou tentando criar um programa que vai receber uma lista de produtos vendidos, através de uma conexão Socket.
Consigo conectar via TCPClient, porém não estou conseguindo enviar a lista de comandos, e nem receber o resultado que vem do server.
No meu teste, consigo receber uma linha, mas preciso receber várias linhas.
Estou fazendo assim:
procedure TForm1.Button4Click(Sender: TObject);
var
LLine : string;
begin
try
if not IdTCPClient1.Connected then
IdTCPClient1.Connect;
IdTCPClient1.SendCmd(Edit3.Text);
//LLine := IdTCPClient1.IOHandler.ReadLn();
Lline := IdTCPClient1.Socket.ReadString(6000);
mmLog.Lines.Add(LLine);
except
on E:Exception do
if ( E.Message <> 'Connection Closed Gracefully.') then
mmLog.Lines.Insert(0, 'ERROR: ' + E.Message);
end;
end;
Estou usando Indy 10 e Delphi Tokio.
Prefiro utilizar o componente socket padrão, mas para TIndy
já utilizei da seguinte maneira:
Considerando que o servidor escreva linha a linha, basta informar na primeira linha a quantidade de linhas que esta sendo enviada.
procedure TFormulario.IdServidor1Execute(AContext: TIdContext);
begin
AContext.Connection.IOHandler.WriteLn('3');
AContext.Connection.IOHandler.WriteLn('MENSAGEM 1');
AContext.Connection.IOHandler.WriteLn('MENSAGEM 2');
AContext.Connection.IOHandler.WriteLn('MENSAGEM 3');
end;
Agora imagine que no cliente você já possui a solução. Ou seja, ao invés de utilizar ReadString
utilize o ReadStrings
que lhe devolvera uma lista de mensagens:
var
i: Integer;
vTexto: TStringList;
vTamanho: Integer;
begin
vTexto := TStringList.Create;
vTamanho := IdTCPClient1.IOHandler.ReadLn.ToInteger;
IdTCPClient1.IOHandler.ReadStrings(vTexto, vTamanho);
for i := 0 to Pred(vTexto.Count) do
Memo1.Lines.Add(vTexto[i]);
...
Neste caso, cabe uma pequena modificação no lado do Servidor para que ele sempre informe a quantidade de mensagens que esta enviando no pacote.
Answered by Junior Moreira on January 12, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP