Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
UPnP Nedir? Delphi İle Nasıl Kullanılır?
#1
Herkese merhabalar,


Bugün sizlere yakında elveda diyeceğim bir tekniği tanıtacağım. Bu teknik sizin Client-Server mantığında oluşturmuş olduğunuz projeler için bir port açıcı görevi görüyor diyebiliriz. 

Exclamation Peki bu tekniğe neden elveda diyorum? 

Tekniğe elveda dememin sebebi şudur ki; tüm modemlerde desteği bulunmaması bu açıdan bazı bilgisayarlarda problem çıkartıyor olabilmesidir.

Exclamation  Peki bu teknik nedir?

UPnP olarak bilinen, açılışı "Universal Plug & Play" olarak adlandırılan bir iletişim aracı diyebiliriz. 

Idea  Google amcanın tanımı ile;

Alıntı:UPnP, Universal Plug&Play'in kısaltması. Evrensel Tak&Çalıştır adı verilen teknoloji sayesinde birçok elektronik cihaz kolayca birbiriyle uyumlu çalışabilir hale gelmektedir. Elektronik cihazlar bağlantı özelliği kazansa bile standart haberleşme protokolleri kullanmadığı sürece birbiriyle uyumlu çalışamazlar.


Tanımının yeterli olduğunu düşünüyorum bu sebeple sizlere Delphi ile nasıl kullanacağımız hakkında biraz bilgi vereyim.


1) UPnP.pas dosyasını tanıyalım

 UPnP.pas bir sınıf yapılı dosyadır. Bu sınıfı Delphi ile kullanarak en azından benim modem için uyumlu olduğundan dolayı birkaç deneme yapabiliriz.


UPnP dosyasını indirmek için tıklayınız

Exclamation UPnP.pas dosya içeriği;

unit UPnP;    ///Türkçe Çeviri: Halil Han Badem

interface

uses
Windows, ActiveX, OleAuto, Variants, SysUtils;

type
PortAcmak = class
public
   class function Ekle(const Aktiflik: Boolean; const CikisPort, GirisPort: DWORD;
     const IPAdresi, Protokol, Aciklama: String): Boolean;
   class function Kaldir(const CikisPort: DWORD; const Protokol: String): Boolean;
end;

implementation

class function PortAcmak.Ekle(const Aktiflik: Boolean; const CikisPort, GirisPort: DWORD;
const IPAdresi, Protokol, Aciklama: String): Boolean;
var
n, p: Variant;
Begin
Result := False;
try
   n := CreateOleObject('HNetCfg.NATUPnP');
   p := n.StaticPortMappingCollection;
   if not VarIsClear(p) then
   begin
     p.Add(CikisPort, UpperCase(Protokol), GirisPort, IPAdresi, Aktiflik, Aciklama);
     Result := True;
   end;
except
// on e: exception do showmessage(e.Message);
end;
end;

class function PortAcmak.Kaldir(const CikisPort: DWORD; const Protokol: String): Boolean;
var
n, p: Variant;
Begin
Result := False;
try
   n := CreateOleObject('HNetCfg.NATUPnP');
   p := n.StaticPortMappingCollection;
   if not VarIsClear(p) then
     Result := p.Remove(CikisPort, UpperCase(Protokol)) = S_OK;
except
// on e: exception do showmessage(e.Message);
end;
end;

end.



İster indirebilir isterseniz de direkt burdan kodları alabilirsiniz. Geçmişte can sıkıntısından class isimlerini ve değişken isimlerini Türkçeye çevirmiştim Smile

NOT: Aşağıdaki aşamaları yapmadan önce UPnP.pas dosyasını projenize eklemeyi unutmayınız  Exclamation


uses
...
UPnP;


Bundan sonra altta bulunan kodlar ile portu açabilirsin. Tabi bu port program açık kalana kadar, kapandığı an port disable olur.

procedure TUPnPFRM.Button1Click(Sender: TObject);
begin


 if not PortAcmak.Kaldir(4232, 'TCP') then     // aynı port varsa kaldırır, var olupta kaldıramazsa sorun belirtir.
 ShowMessage('Aynı porttan mevcut!');


 if not PortAcmak.Ekle(True, 4232, 4232, '192.168.1.37', 'TCP', 'DelphiCanDenemePortu')  then   // gerekli bilgilendirmeler yapılıyor.
 ShowMessage('Port açılırken hata oluştu!');


end;



 Deneme amaçlı bir Server Socket ile 4232 numaralı port üzerinde denememi yaptım;


ByybQL.png




Kaynak kodlarını github adresimde bulabilirsiniz.

Github UPnP Projesi: Tıklayın!


Umarım bu yazım yardımcı olmuştur, herkese iyi forumlar.

Saygılarımla,
İyi çalışmalar.
kisisel_logo_dark.png
WWW
Cevapla
#2
Klavyene saglik kardesim Big Grin. Ilerde isime yarar bunu biyere koyayim
Z7HWzZNFQYYsFui_gNRNO4nQ5jO9_aTWbllb_cmW...w1366-h654
WWW
Cevapla
#3
Emeğinize sağlık
There's no place like 127.0.0.1
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SANAL BİLGİSAYARA macOS SONOMA NASIL KURULUR? engerex 1 229 19-02-2024, Saat: 08:41
Son Yorum: yhackup
  Delphi ile .Net Ortamında geliştirilen dll içerisindeki fonksiyon kullanımı yhackup 10 7.948 09-04-2023, Saat: 02:17
Son Yorum: gogo72
  Delphi ve Protocol Buffers SimaWB 10 6.748 10-12-2022, Saat: 15:04
Son Yorum: SimaWB
  Delphi AES 128 ECB PKCS5 Padding ile sorun aegean 1 793 28-11-2022, Saat: 13:07
Son Yorum: aegean
  Delphi IDE'sine Eklenti Yapmak - 2 SimaWB 29 21.636 03-07-2022, Saat: 16:40
Son Yorum: enigma



Konuyu Okuyanlar: 1 Ziyaretçi