Perl ile Soket Programlama

Yazan: Faruk Enes | Tarih 1 Ocak 2002 | Yorum  1 Yorum
BerbatKötüOrtaGüzelHarika Henüz puan verilmemiş
Loading ... Loading ...

Her zaman dediğimiz gibi, artık herhangi bir program yapılacaksa, bir şekilde internet protokollerinden etkilenmelidir. Bir Local Ağ programı da olsa, bir InterNetWorks programı da olsa, programlarımız birşekilde Net içine girecektir, bir şekilde Internet Protokollerinden herhangi birini kullacaktır. Buzdolapları bile o Java'nın muazzam teknolojisi ile, online hale gelmiş iken, Sun Online Araba prototipleri yaparken, online olmayan programlar pek tat vermiyor doğrusu..

ile soket programlamada, önce ortadan bir giriş yapacağız. Sonraki zamanlarımızda ise, başa dönecek ve sondan bitireceğiz. Başlangıcı ortadan yapmak kanaatimce her zaman iyidir.

Ufak Bir Lan Programı

Bu ay bir modülün özelliklerini kullanarak yapabileceğimiz küçük bir program yapacağız. Bu program, local ağımızda bulunan bir makineden yazdığımız verileri, diğer makine de gösterecek. Burada bize gerekli olan, iki makinemizde de, kurulumu yapılmış olmasıdır.

Önce veriyi diğer bilgisayardan alacak olan programı yapalım. Bu program, veriyi alacak olan makine de çalışacak.

:
  1. #!/
  2.  
  3. use IO::Socket;
  4.  
  5. my $soket = new IO::Socket::INET (
  6. LocalHost => '192.168.0.2',
  7. LocalPort => '1981',
  8. Proto => 'tcp',
  9. Listen => 1,
  10. ) or die "Socket acilamadi : $!\n";
  11.  
  12. my $soket2 = $soket->accept();
  13.  
  14. while(<$soket2>) {
  15. print $_;
  16. }
  17. #close($soket);

Bu scriptimiz, 192.168.0.2 adresli local pc'mizde, 1981'inci portu 1 saniyede bir dinlemek üzere açar, bu porttan gelen verileri kabul eder ve her ne zaman veri girilirse, girilen veriyi ekrana basar.

Bu scriptimiz, eğer 'ü belli bir zaman ile sınırlandırmaz iseniz, ya da Socket hash'ina, Timeout değeri vermez iseniz, elinden geldiğince uzun bir süre, (belki teoride sonsuz) beklemede kalacaktır.

Ancak tabii ki, bir de bu sokete veri gonderen bir script yazmamız lazım. Bunu gene aynı modülü kullanarak yapıyoruz:

:
  1. #!/
  2.  
  3. use IO::Socket;
  4.  
  5. my $soket = new IO::Socket::INET (
  6. PeerAddr => '192.168.0.2',
  7. PeerPort => '1981',
  8. Proto => 'tcp',
  9. ) or die "Soket acilamadi : $!\n";
  10.  
  11. while($in = ) {
  12. print $soket "$in\n";
  13. }
  14. #close($soket);

Burada ise, gene bir soket açıyoruz. Ama bu sefer açtığımız soket, kendi bilgisayarımızda değil, daha önce beklemeye aldığımız bilgisayarda.

Burada soket hash'ine, PeerAddr değeri veriyoruz. Yani verinin yollanacağı bilgisayarın lokal ip adresi. PeerPort değişkenine ise, diğer bilgisayarda açtığımız port değeri olan "1981" i veriyoruz. Protokol olarak ikisinde de, tcp kullandığımız için, Proto değerini tcp olarak diriyoruz. (Udp?)

Ve while($in = <STDIN>) bloku ile, sürekli giriş için scriptimizi beklemeye alıyoruz.

Eğer bir sorun olmaz ise, 192.168.*.* numaralı pclerden yazdığımız herşey, 192.168.0.2 adresli pc de görünecektir.

Burada çeşitli sorunlar çıkabilir. Örneğin veri göndermek için yazdığımız script, soket açarken, diğer makinanın portunun açık olmadığını görür ise, die() mesajını yazar ve sonlanır. Bu çok doğal birşeydir. Listen modda olmayan bir porta veri göndermemiz mümkün değildir. Eğer böyle olsa idi, internet daha bir sakıncalı hale gelirdi. İstediğimiz pc ye istediğimiz porttan girebilirdik ve neler etmezdik? :-)

Peki bu scriptlerimizin, modülsüz nasıl yazıldığını görmek ister misiniz? Ya da bu kadar basit bir scriptten niyetle, nasıl bir lokal chat scripti yapabileceğimizi? Peki ya dosya transferleri? Peki ya biz scriptimizi, Tk ile renklendirsek, ve güzel bir hale soksak?

Eğer bunları merak ediyorsanız, bu başladığım yazı dizisini takip edin. Ya da ben yazmadan, siz öğrenin ve yazın. Hatta bu dediklerimden yaptığınız birşey olursa, bana yollamanız halinde, burada yayınlayalım ve tartışalım. Biraz daha etkileşime geçelim; Ne dersiniz?

Gelecek ay görüşmek dileği ile.. Savaşsız seneler...

Çok sevdim, başkalarıyla paylaşayım:
  • Google Bookmarks
  • Facebook
  • MySpace
  • TwitThis
  • del.icio.us
  • Digg
  • Live
  • YahooMyWeb
  • Technorati
  • StumbleUpon
Yazdır Yazdır | 528 Görüntülenme | Kategori: Diğer Diller | Trackback  Geri İzleme
Etiketler  Etiketler: ,

Benzer Yazılar


Yorum Yap


(gerekli)

(gerekli,yayınlanmaz)




XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>