(02-04-2023, Saat: 12:51)muratcelik64 Adlı Kullanıcıdan Alıntı: (30-03-2023, Saat: 10:30)shooterman Adlı Kullanıcıdan Alıntı: Evet arkadaşlar Sorun çözüme kavuşturdum. TIdSNMP tasarımından kaynaklı Artık kendi şirketimizde 1ms de tüm network bilgisini alabiliyorum sorunsuz. Zaman ve emek ayırıp cevap veren herkese teşekkürler. Bankada 4dk tek ipblok taraması biterken artık 16sn sürede geçti testleri.
Selamlar,
Sorununuzun çözüldüğüne sevindim. İmkanınız olursa, bu tip bir yardıma ihtiyacı olan başka bir kişinin çözüme ulaşması için, çözüm kodunu paylaşmanızı rica ederim.
snmp konusu terminal sistemde (Server & Client) program yazanlar için eninde sonunda gerekli görünüyor.
Bende bu konuyu araştırıyordum ve aşağıdaki linki buldum.
Paketi indirip incelemeniz bir fikir verebilir.
snmpserv & snmp çalışıyor.
http://synapse.ararat.cz/doku.php/download
Evet dogru yoldasın bende TIdSnmp single thread destekli ve 161-162 portlarını açıp bağlanıp bilgi alıp hafızayı temizleyip sonra porttu kapatması için geçen sürede oluyor haya componettin tasarımı böyle synapse birazda kodlar ile oynayarak kendi istegime göre ayarlardım ve 5 sn binlerlerce cihaz oldugunda saatler sürer onun için ben 1mili saniye gibi veya networkdeki hıza bağlı olarak 10milisn gibi aralıkta içi yapıyorum toplamda 2-4 dk tüm cihazlardan gelen verileri alıyorum. kodu daha once gondermiştim sdandart snmp veri alma sadece funcsiyona cevirdim parametreli degişken alıyorum okadar.
function SNMPBilgiAl(const OID, Community, SNMPHost: AnsiString;TimeOut:integer; var Value: AnsiString): Boolean;
var
SNMPSend: TSNMPSend;
begin
SNMPSend := TSNMPSend.Create;
try
SNMPSend.Timeout:=TimeOut;
SNMPSend.Query.Clear;
SNMPSend.Query.Community := Community;
SNMPSend.Query.PDUType := PDUGetRequest;
SNMPSend.Query.MIBAdd(OID, '', ASN1_NULL);
SNMPSend.TargetHost := SNMPHost;
Result := SNMPSend.SendRequest;
Value := '';
if Result then
Value := SNMPSend.Reply.MIBGet(OID);
finally
SNMPSend.Free;
end;
procedure TForm14.Button7Click(Sender: TObject);
begin
TTask.Run(procedure
Begin
TThread.CreateAnonymousThread(
procedure
var cevap:ansistring;
Parcala:TArray<string>;
Aranan,Ipblok,Ipkalan,Basla:string;
K,j:Integer;
begin
basla:=DateTimeToStr(now);
Memo1.Lines.Add('Başla:'+Basla);
Aranan:=Edit1.Text;
parcala:=Aranan.split(['*']);
for K :=Low(Parcala) to High(Parcala) do
begin
Ipblok:=Parcala[0];
Ipkalan:=Parcala[1];
end;
TParallel.For(0, 255, procedure(I: Integer)
begin
SNMPBilgiAl('1.3.6.1.2.1.1.1.0','public',Ipblok+I.ToString+Ipkalan,StrToInt(Edit2.Text),cevap);
if cevap=''then
//Memo1.Lines.Add(Ipblok+I.ToString+Ipkalan)
else begin
inc(j);
Memo1.Lines.Add('Bulunan:'+j.ToString+'-'+Ipblok+I.ToString+Ipkalan+':'+cevap);
end;
end);
Memo1.Lines.Add('Basla:'+basla);
Memo1.Lines.Add('Bitti:'+DateTimeToStr(now));
end).Start;
end);
end;
bu kodlarla işimi çözdüm arkadaşlar ip adresinin 10.224.*.150 örnek veya 10.*.10.150 gibi * nerede ise oradaki blok ipler aranıyor.
Test başarılı oldu şimdi bunu Servis orarak asıl projeye göre değiştiriyorum .