kullanıcı listeleme(port tarama)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Misafir

kullanıcı listeleme(port tarama)

Mesaj gönderen Misafir »

Network ağında program içerisnde o programı kullanan bilgisayarları listelemek istiyorum.
şu şekilde bir kod yazdım.

Kod: Tümünü seç

procedure TMainForm.YenileClick(Sender: TObject);
var
i:integer;
begin

 for i:=1 to 255 do
 begin
 clientsocket2.Port :=50;
 clientsocket2.Address :='192.168.26.'+inttostr(i);
 clientsocket2.Active :=true;
 clientsocket2.Active :=false;
 end;

end;

procedure TMainForm.ClientSocket2Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 listbox1.Items.add(clientsocket2.Socket.RemoteHost );
end;
bu kodu çalıştıramadım..
'Asyncronous socket error 10061' gibi bir hata oluştu.
programda serversocket2 50.port üzerinden dinleme durumunda..
bu kodda nasıl değişiklikler yapabilirim..
[/code]
P206
Kıdemli Üye
Mesajlar: 395
Kayıt: 17 Haz 2003 12:36
Konum: İstanbul

Mesaj gönderen P206 »

Try Except bloğuna almayı dene
Kullanıcı avatarı
akgun83
Üye
Mesajlar: 106
Kayıt: 26 Eyl 2003 11:34

Mesaj gönderen akgun83 »

Kod: Tümünü seç

try
   clientsocket2.Active :=true; 
except
end;
   clientsocket2.Active :=false; 
şeklinde kodu değiştirip derle. Uygulamayı da delphiden değil Windows Explorer dan çalıştır.

Kolay gelsin.
Misafir

Mesaj gönderen Misafir »

aynı hatayı yine veriyor..
1 den 255'e kadar program yüklü olmayan bilgisayar sayısınca
şu hatayı arka arkaya veriyor..

'Asyncronous socket error 10061'
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

10061 socket hatası yani bağlanamıyor karşı taraf cevap vermiyor anlamında. çok uzun zaman oldu socketlerle uğraşmıyalı ama sanırım döngü içinde olmasından kaynaklanıyor yani 255 kez IP değişiyor bağlan deyip arkasından boşver vazgeç diyorsun :) socketler ve comm port lar bu kadar hızlı karar değiştiremezler az hantal ve mongoldurlar :) Kullandığın paketin demolarını bir incele, örnek vardır mutlaka. Tahminim döngü içinde olması

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Misafir

Mesaj gönderen Misafir »

örneklerde bulamadım.timer nesnesi sonuç verebilir ama inanılmaz yavaş oluyor.bazı programlarda görüyorum.bu işlem çok hızlı gerçekleşebiliyor.acaba socket bileşeninin değişik bir özelliği mi var yoksa farklı yöntemler ve bileşenler mi kullanılıyor?
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

muhtemelen thread seklinde kullanıyorlar.
bu sayede tum surecler eszamanlı calısıyor, yani birinin bitemsini beklemeden digeri calısabiliyor.
Ama her surec icin ayrı bir socket create etmek gerekli sanırım
ÜŞENME,ERTELEME,VAZGEÇME
Misafir

Mesaj gönderen Misafir »

anlattığınız yöntem mantıklı olabilir ama uygulamada sıkıntı çekiyorum. Delphi de yeni sayılırım.zahmet olmazsa konuyla ilgili bir kaç satır kod ile örnekleme yaparsanız sevinirim.
ilginize teşekkürler.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Aklıma gelen yöntem 255 tane clientsocket i create et bunları bir arrayde tavsiye TList içinde tut bunları yukarıdaki döngü içinde active edebilirsin sanırım, disconnect olduklarında da eventlerini aynı procedure ü kullanarak bunları dispose yada gerekli işlemleri yapabilirsin sanırım

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Misafir

Mesaj gönderen Misafir »

Yine ben:((
1 den 255 e kadar clientsocket create ettim..

Kod: Tümünü seç


procedure TMainForm.YenileClick(Sender: TObject);
var
i:integer;
port:Tclientsocket;
begin

  for i:=1 to 255 do
  begin
   port:=Tclientsocket.Create(self);
   port.port :=50;
   port.Address :='192.168.26.'+inttostr(i);
   try
    port.Active :=true;
   except
   end;
  port.Active :=false;
  if port.Socket.Connected then
   begin
   listbox1.Items.add(port.Host );
   end;
  end;

end;

şeklinde yazdım.
ama yine de aynı hatayı alıyorum..
değişen bi durum yok:(
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ÜŞENME,ERTELEME,VAZGEÇME
Misafir

Mesaj gönderen Misafir »

Çok teşekkür ederim verdiğniz kod hatasız tıkır tıkır çalışıyor..:)
Cevapla