GARANTIR DESCONTO

Fórum procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread) #299302

13/10/2005

0

Desculpa minha ignorância..

mas como eu pego o ip do cliente nessa procedure Execute do IdTCPServer1 do Indy?

Eu tava pegando ´AThread.Connection.LocalName´

mas tá retornando o IP do servidor.. como pego o localhost do cliente que tá executando esse Execute?


Amon-ra

Amon-ra

Responder

Posts

13/10/2005

Massuda

Porque você precisa dessa informação? A conexão entre o servidor e o cliente já está feita.


Responder

Gostei + 0

13/10/2005

Amon-ra

Preciso identificar de quem está vindo essa mensagem, podem haver mais clientes simultâneos...

criei uma tabela ´online´ com:

usuario.. nome.. ip/host


Queria buscar na tabela o nome atraves do host...


Estou executando um ´thread´ dentro desse ´Execute´ que faz o trabalho..

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
cm : checamsg;
begin
cm := checamsg.Create(true);
cm.linha := AThread.Connection.ReadLn(LF, 500);
cm.ok(@AThread);
cm.FreeOnTerminate := true;
cm.Priority := tpNormal;
cm.resume;
end;


Aí o thread ja tá interpretando legal a mensagem e tá rodando rápido.. pq nao usei ´while´ ou outros loops como normalmente acho que fazem..

Problema que minha identificação do usuário tava:
Query.Active:=false;
Query.SQL.Text := ´Select usuario from online where ip=´´´+AThread2.Connection.LocalName+´´´´;
Query.Active:=true;
if not query.Eof then
  begin
  usuario := Query.FieldValues[´usuario´];
  end;


Eu mais burro nao vi o erro pq tava testando sozinho.. agora que comecei a testar com mais computadores ao mesmo tempo é que notei que não se detecta o ip assim..


Valeu


Responder

Gostei + 0

13/10/2005

Massuda

O IP do cliente está em AThread.Connection.Socket.Binding.PeerIP e a porta do cliente está em AThread.Connection.Socket.Binding.PeerPort.


Responder

Gostei + 0

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

Aceitar