Это ты где-то накосячил.
Про выход за пределы массива - я ж не зря использовал критическую секцию и в потоке, и в основном коде.
По поводу фильтрации.
Я бы фильтровал в основной программе, а код листенера оставил бы как есть, пусть выгребает все, а уж что отображать можно решить в основной программе. Например так:
Код:
procedure TForm1.ConnectionsMemo;
var
i: Integer;
begin
Memo1.Lines.Clear;
for i := 0 to FThread.Count - 1 do
begin
if (Pos('127.0.0',FThread.IpTable[i].LocalAddr) <> 0) And
(Pos('127.0.0',FThread.IpTable[i].RemoteAddr) <> 0) then
Memo1.Lines.Add('Local: ' + FThread.IpTable[i].LocalAddr + ' | Remote: ' + FThread.IpTable[i].RemoteAddr);
end;
end;
В принципе, можно в потоке в массив сохранять не сроку, а "разобранный" адрес и тогда сравнивать уже целые значения.