AnswerBun.com

Cliente e Servidor socket com Indy

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.

One Answer

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

Add your own answers!

Related Questions

Web View com zoom

1  Asked on September 8, 2020 by joel-messias-do-nascimento

       

Selecionar uma div sem ela ter uma class ou um id?

3  Asked on September 7, 2020 by i_like_trains

 

Equivalente de “Date.now();” do Javascript em C#?

4  Asked on September 5, 2020 by matheus-miranda

         

EventListener em um link a

0  Asked on September 5, 2020 by user190650

       

Soma de duas tabelas diferentes msql php

1  Asked on September 4, 2020 by renato

   

Erro ao executar projeto Angular

1  Asked on September 3, 2020 by diego-estacho

       

Erro em cadastro.php com mysql (etapa final) “INSERT”

2  Asked on August 25, 2020 by user196053

       

Retornar duas funções em um evento onclick JS

1  Asked on August 24, 2020 by anderson-leandro

       

Erro no incremento de array com foreach mais HTML

0  Asked on August 21, 2020 by wesley-souza

       

Listagem de um array dentro de um JSON angular

1  Asked on August 20, 2020 by joao-vitor-franco

     

Switch Case – Break e Return dentro de uma Função – Arduino

0  Asked on August 15, 2020 by lucio-carlos-resende

       

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir