Ir para conteúdo
  • Cadastre-se

dev botao

Exemplo comunicação TCP


Mark Apollo
  • Este tópico foi criado há 3079 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Alguem tem um exemplo de cliente e servidor utilizando o componente ACBrTCPServer? consigo colocar o servidor exemplo para rodar, mas quando envio um comando, utilizando o indy (TIdTCPClient) ele simplesmente trava no sendcmd e não faz mais nada.

var

  comando: string;

begin

  comando := Format('NFe.Enviar(%s,%s,%s);'+#13,[

      DMNFe.QryNfeNF_CODIGOFILIAL.AsString,

      DMNFe.QryNfeNF_NUMERONOTAFISCAL.AsString,

      DMNFe.QryNfeNF_NUMEROSERIENOTA.AsString

      ]);


  with TCPClient do

  begin

    Connect('localhost',3434);


    SendCmd(comando); //Aqui fica travando.


    Disconnect;

  end;

end;

Agradeceria se alguém pudesse postar o exemplo da conexão aqui.

abraços

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • Moderadores

Eu uso o componente TcpClient e faço algo mais ou menos assim, funciona perfeitamente com o ACBrTCPServer

 

function EnviarComando(const ACommand: AnsiString; var Resposta: AnsiString): Boolean;
var
  Resp: Integer;
  ClientTCP: TTcpClient;
begin
  Result   := False;
  Resposta := EmptyAnsiStr;

  ClientTCP := TTcpClient.create(nil);
  try
    ClientTCP.RemoteHost := AnsiString(fRemoteHost);
    ClientTCP.RemotePort := AnsiString(IntToStr(fRemotePort));
    ClientTCP.Open;
    try
      Resp := ClientTCP.Sendln(ACommand, sLineBreak);
      GravarLog('Comando: ' + ACommand);

      if Resp > 0 then
      begin
        ClientTCP.WaitForData(10000);
        Resposta := ClientTCP.Receiveln(sLineBreak);
        Result := Pos('OK', Resposta) > 0;
      end;
    finally
      ClientTCP.Close;
    end;
  finally
    ClientTCP.Free;
  end;
end;

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...

Olha so Régis como estou mandando usando sua funcao: declarei comando, Resposta: AnsiString;

 

comando := 'NFe.StatusServico' + sLineBreak + '.' + sLineBreak;

if EnviarComando(comando, Resposta) then
  begin
    frmPrincipal.Aguarde('Resposta do ServerNFe', Resposta, True, True, 5);
  end;

 

o problema que achei debugando é que o resp fica valor -1, entao nao me da uma respota

 

Grato

Link para o comentário
Compartilhar em outros sites

Régis fiz varios testes um deles foi:

procedure Tfrmnotafiscal_menu.bt_nfe_statusClick(Sender: TObject);
var
  d: TTime;
  Resp: Integer;
  comando1, resposta1: string;
begin


  with TcpClient1 do
  begin
    RemoteHost := 'localhost';
    RemotePort := '3436';
    comando1 := 'NFe.StatusServico' + sLineBreak + '.' + sLineBreak;
    if Connect() then
    begin
      ShowMessage('Conectou');
      //Sendcmd('NFe.StatusServico' + sLineBreak + '.' + sLineBreak);

      Sendln(comando1);
      resposta1 := TcpClient1.Receiveln(sLineBreak);
      Disconnect;
      ShowMessage(resposta1);

    end;




  end;
  Exit;

ai vem a resposta com : ACbrMonitor2 e mais a versao e CAPICOM

Obrigado, so estou postando os testes pra ajudar na analise

Link para o comentário
Compartilhar em outros sites

Régis muito obrigado pela resposta, mas vou tentar usar com txt, deixa explicar meu problema, meu delphi comecou a me encomodar depois q inventei de atualizar a versao do indy para 10, depois tentei voltar para a 9 e comecei a ter muitos problemas com componetes desta paleta, tanto que para enviar email tive que usar uma dll de terceiros, mas eu tava tentando usar usar via tcp ip porque estou meio preocupado com a situação de vários usuarios ao mesmo tempo mandarem o mesmo comando, mas li em alguns posts que posso colocar ENTNFE01 02 user1 e assim por diante, entao acho q nao terei problemas né? e me diga voce recomenda qual?

 

Abraços e obrigado

 

 

Mizael

Link para o comentário
Compartilhar em outros sites

Amigos por favor me de uma ajuda, seguinte: com txt estou conseguindo fazer os comandos, o problema é o seguinte, quando mando o comando por exemplo de NFE.StatusServico ele faz perfect e me devolve legal o status o problema é que se em seguida eu mandar o comando de consultar ele traz o status no caso o retorno anterior, ai se eu apertar novamente o botao de consultar ele mostra a consulta porem nem é mais da acao em questao ja é da outra consulta, deu pra entender, ai pergunto? preciso esperar um certo tempo pra pegar o retorno, pode ser junto na mesma procedure? eu queria na verdade usar por tcp que acho que não teria esse problema mas nao estou tendo comunicacao via sockts.

 

Grato a todos que ajudarem

 

 

Mizael Rocha

Link para o comentário
Compartilhar em outros sites

Tem um exemplo logo no início do tópico, tentou com ele?

Bom dia, Regys.

 

Com seu exemplo de comunicação TCP/IP , estou tentando utilizar em conjunto com o AcbrNFeMonitor .

Conectou , enviei o comando no monitor : ficou assim

 

ACBrNFeMonitor2 Ver. 0.7.15.0 - CAPICOM

Conectado em: 05/07/13 13:28:24

Máquina: 187.3.166.xx

Esperando por comandos.

 

*** Porem na função de exemplo eu enviei o seguinte comando :  CTe.ConsultaCadastro(SP, 000xxx08000yy1, 0)

*** Monitor esta configurado para TCP/IP não para comando !!!

 

Nesta sua função como posso enviar o arquivo , a rotina gerar o arquivo tenho tudo somente como posso enviar desta forma .

 

Obrigado

 

Link para o comentário
Compartilhar em outros sites

Então, aquele exemplo é para a comunicação TCP simples utilizando o componente nativo do Delphi, vocês precisam adapta-lo ao protocolo do monitor, veja no help como é o padrão dos comandos.

Boa noite, realmente eu estava fazendo da forma incorreto , via TCP o monitor fica esperando os comandos.

Porem eu conecto com sua Procedure, e envio o comando so que ele so retorno a mesma coisa :

ACBrNFeMonitor2 Ver. 0.7.15.0 - CAPICOM

 

mas não executa o comando que eu envio.

 

Tem mas alguma dica ou exemplo de como utilizado ( mesmo so pra consulta o serviço )

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

Boa noite, consegui enviar os comandos para o AcbrNFeMonitor com sucesso, porem como que recebo o retorno completo do Monitor. Por exemplo eu estou enviando o comando para consulta de Cadastro de ( CNPJ ) :

 

o meu retorno fica sempre so assim :

 

Resposta: ACBrNFeMonitor2 Ver. 0.7.15.0 - CAPICOM

 

e gostaria de receber os dados completos dos dados CNPJ consultado .

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • 3 semanas depois ...

Eu uso o componente TcpClient e faço algo mais ou menos assim, funciona perfeitamente com o ACBrTCPServer

 

function EnviarComando(const ACommand: AnsiString; var Resposta: AnsiString): Boolean;
var
  Resp: Integer;
  ClientTCP: TTcpClient;
begin
  Result   := False;
  Resposta := EmptyAnsiStr;

  ClientTCP := TTcpClient.create(nil);
  try
    ClientTCP.RemoteHost := AnsiString(fRemoteHost);
    ClientTCP.RemotePort := AnsiString(IntToStr(fRemotePort));
    ClientTCP.Open;
    try
      Resp := ClientTCP.Sendln(ACommand, sLineBreak);
      GravarLog('Comando: ' + ACommand);

      if Resp > 0 then
      begin
        ClientTCP.WaitForData(10000);
        Resposta := ClientTCP.Receiveln(sLineBreak);
        Result := Pos('OK', Resposta) > 0;
      end;
    finally
      ClientTCP.Close;
    end;
  finally
    ClientTCP.Free;
  end;
end;

Poderia me informar qual unit declarar para utilizar a classe TTcpClient, não consegui encontrar, grato.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Este tópico foi criado há 3079 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.