Listar todos os servidores de BD na rede

Delphi

01/10/2005

Boas, alguem sabe como listar todos os servidores de algum BD espefico que estejam logados na rede?

Eu consegui listar o grupo de trabalho e os pcs da rede, joguei num treeview e tal..funciona blza, mas queria ser mais especifico e listar apenas os servidores..
uma coisa que eu testei e funcionou, foi conectar com sockets nos pcs utilizando a porta do banco que eu quero..por exemplo, como listo todos os pcs, eu tento conectar na porta 3301(mysql) de cada um, aih os que responderem eu jogo num array e assim tenho os servers, mas ficou mto lento e eh chato pra fazer a consistencia das informacoes..

alguem ae pode dar uma ajuda??

falow, abracos..


Saint

Saint

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

01/10/2005

Colega,

Acho que não tem como ser muito rápido, afinal vc está construindo um scanner. Acho que o melhor caminho (senão único) é o que vc tomou testando a conexão de cada host em cada porta. Mas eu também acho que vc poderia usar um outro componente que *talvez* trabalhe melhor em raleção ao timeout: TIdTCPClient do pacote ´Indy Clients´.
Eu o utilizo para testar se o servidor especificado na configuração da aplicação está disponível antes de tentar a conexão com o SGBD.
Vc poderia utilizar algo parecido com isto:
procedure...
var
  Hosts: Array of String;
  Ports: Array[0..2] of Integer;
  I, J: Integer;
begin
  // Aqui depende da sua lista de máquinas... vc pode medir o compri-
  // mento da lista para setar o comprimento do array e utilizar um 
  // "FOR" p/ preencher os hosts de acordo com a sua lista.
  SetLength(Hosts, 2);
  Hosts[0] := ´localhost´;
  Hosts[1] := ´VDO´;

  // As portas que vc quer procurar.
  Ports[0] := 1433; // SQL Server
  Ports[1] := 3050; // Interbase/Firebird
  Ports[2] := 3306; // MySQL

  // O scanner
  for I := 0 to Length(Hosts) - 1 do
  begin
    idTCPClient1.Host := Hosts[I];
    for J := 0 to (Length(Ports) - 1) do
    begin
      idTCPClient1.Port := Ports[J];
      try
        idTCPClient1.Connect;
      except
      end;
      if idTCPClient1.Connected then
      begin
        ListBox1.Items.Add(´OK para a porta ´ + IntToStr(Ports[J]) + ´ em ´ + Hosts[I]);
        idTCPClient1.Disconnect;
      end;
    end;
  end;
end;


T+


GOSTEI 0
Saint

Saint

01/10/2005

Eh cara, acho que nao vai ter jeito mesmo...

eu queria deixar bem rápido mas isso tb nao é primordial, vou fazer isso e se o cliente reclamar eu listo todas as máquinas e deixo ele escolher..

valeu cara, forte abraco


GOSTEI 0
POSTAR