UPnP Nedir? Delphi İle Nasıl Kullanılır?

UPnP Nedir? Delphi İle Nasıl Kullanılır?

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.

⚠️  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.

⚠️  Peki bu teknik nedir?

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

ℹ️  Google amcanın tanımı ile;

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.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 :)

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

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;

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 🤟


Share Tweet Send
0 Comments
Loading...