PDA

Visualizza la versione completa : [DELPHI] Trovare una porta libera per ascolto di un server con Indy


firefox88
09-12-2007, 16:22
Salve a tutti,

sto cercando disperatamente (e urgentemente) un modo per trovare, in Delphi, il numero di una porta "libera", ovvero non occupata da nessun server in ascolto.

Molti server Indy, se settati sulla porta 0, cercano e trovano una porta libera sulla quale restare in ascolto. Ma una volta trovatala, non c' verso di "recuperarla".

In sintesi, ho bisogno di una funzione che restituisca un valore intero corrispondente a una qualsiasi porta libera su localhost.

Ho cercato a lungo su Google, ma tutti i metodi che ho trovato fanno uso di Indy 8 o 9, e io ho Indy 10, che non ha una sola riga di codice in comune con le versioni precedenti.

Vi ringrazio in anticipo per la pazienza e il tempo che mi dedicate :)

firefox88
10-12-2007, 11:03
Nessuno sa niente al riguardo? :(

firefox88
10-12-2007, 19:14
Alla fine ci sono arrivato!!!



function SeekFreePort(start : integer) : integer;
var
i : Integer;
TestSocket : TIdSimpleServer;
begin
TestSocket := TIdSimpleServer.Create(nil);
for i := start to 65535-1 do
begin
try
TestSocket.BoundPort := i;
TestSocket.BoundIP := '127.0.0.1';
TestSocket.CreateBinding;
TestSocket.BeginListen;
except
TestSocket.EndListen;
Continue;
end;
Break;
end;
Result := i;
TestSocket.Free;
end;


L'ho fatta io ispirandomi a una vecchia funzione che utilizzava ancora la vecchia classe TServerSocket. Diciamo che ho fatto un porting...
Speriamo serva a qualcun altro!

P.S.: credo siano necessari i componenti Indy 10 per utilizzare quella funzione.

A presto :)

Loading