Programlama Rehberi

Perl İle Sunucu-İstemci Alışverişi



server.pl
#!/usr/bin/perl -s
#  Author: Hamdi Kavak
#  Date : 08 December 2007 - 10:04 PM
#####################################################################################
# - TCP/IP tabninda calisan bir sunucu programdir. Ayni anda tek baglanti yapilabilir.
# - Varsayilan port: 5555, sunucu adi: localhost
# - Baglanti kuruldugunda istemciden istek bekler
#  * cikis, isletim sist bilgisi, calisilan dizin komutlari algilanabilir
##################################################################################### 
###--- Moduller ----###

use Socket; # soket fonksiyonlarini saglayan modul
use Cwd;
###--- Ana Program ---###
$server_port = "5555"; # Varsayilan port numarasi ataniyor
$server_name = "localhost"; # Varsayilan sunucu adi degeri ataniyor
print "\nSunucu adi:port numarasini giriniz. Varsayilan icin enter (localhost:5555): ";
unless( ($input = <STDIN>) eq "\n" ) {
  chomp $input;
  ($server_name, $server_port) = split /:/, $input; # : ile degerleri ayir
}
$ipaddress = inet_aton($server_name);
$server_address = sockaddr_in($server_port, INADDR_ANY);
$protocol = getprotobyname("tcp");
my $dir = &cwd;
print STDOUT "\nSunucunun calistigi dizin : \"$dir\" \n";
print STDOUT "Perl'un sunucusunun adresi : $ipaddress\n";
print STDOUT "Perl'un tam adresi: \"$server_address\"\n";
print STDOUT "Sunucu: $server_name\tPort: $server_port\n";
socket(SERVER, PF_INET, SOCK_STREAM, $protocol) || die ("Soket olusturulamadi: $!");
print STDOUT "$server_name uzerinde soket olusturuldu...\n";
 
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1); # Simdi sunucumuzun kolayca baslatabiliriz 
select(SERVER); # SERVER'i varsayilan tasiyici yaptik
$| = 1; # Tamponunu temizle
 
bind(SERVER, $server_address) or die "$server_port numarali porta baglanilamiyor: $!\n";
print STDOUT "... soketimiz $server_port numarali porta baglandi ...\n";
listen(SERVER, SOMAXCONN) or die "$server_port numarali port dinlenemiyor: $!\n";
print STDOUT "... $server_name, $server_port numarali portu dinlemeye basladi...\n";
my $counter=0;
while (accept(CLIENT, SERVER)){ # Baglantilari kabul et
 select (CLIENT); # SERVER'i varsayilan tasiyici yaptik
 $| = 1; # Tamponunu temizle
 while(($intext = <CLIENT>)){
  $counter++;
  $respond_message="Sunucu uzerindesiniz $counter";
  if($intext =~ m/^(q|Q|(quit)|(Quit)|(QUIT)|\\n)/) { # gonderilen satirda cikmak mi istemis?
   print STDOUT "Istemci ayriliyor\n"; # sunucu programin ekranina komutu yazdir
   last;
  }
  elsif($intext =~ m/^(os|OS)/) { # gonderilen satirda isletim sistemini mi ogrenmek istemis?
   print STDOUT "Istemci isletim sitemimi ogrenmek istedi\n"; # sunucu programin ekranina komutu yazdir
   $respond_message="Uzerinde calistigim platform : $^O";
  }
  elsif($intext =~ m/^(wd|WD|cwd|CWD|pwd|PWD)/) { # gonderilen satirda dizin adresini mi ogrenmek istemis?
   print STDOUT "Istemci dizin adresini ogrenmek istedi\n"; # sunucu programin ekranina komutu yazdir
   $respond_message="Uzerinde calistigim dizin : $dir";
  }print STDOUT "=>", $intext;  # sunucu programin ekranina istemciden geleni yazdir
  print CLIENT "$respond_message\n"; # Istemciye bir satirlik cevap gonder
   }
}
close(SERVER);

client.pl
#!/usr/bin/perl -s
#  Author: Hamdi Kavak
#  Date : 08 December 2007 - 11:13 PM
#####################################################################################
# - TCP/IP tabninda calisan bir istemci programdir. Ayni anda tek baglanti yapilabilir.
# - Varsayilan port: 5555, sunucu adi: localhost
# - Sunucuya isteklerde bulunur, eger cikis isteginde bulunulursa program sonlandirilir
##################################################################################### 
###--- Moduller ----###

use Socket;
###--- Ana Program ---###
$remote_port = "5555"; # Varsayilan port numarasi ataniyor
$remote_host = "localhost"; # Varsayilan sunucu adi degeri ataniyor
print "\nBaglanacagini sunucu adi:port numarasini giriniz. Varsayilan icin enter (localhost:5555): ";
unless( ($input = <STDIN>) eq "\n" ) {
  chomp $input;
  ($remote_host, $remote_port) = split /:/, $input; # : ile degerleri ayir
}
print STDOUT "Baglaniyor => Sunucu: $remote_host\tPort: $remote_port\n";
$protocol = getprotobyname("tcp");
$ipaddress = inet_aton($remote_host) or die "$remote_host girdisi internet adresine donusturulemiyor: $!\n";;
$paddress = sockaddr_in($remote_port, $ipaddress);
print STDOUT "Perl'un IP-adresini kendi icindeki gosterimi : $ipaddress\n";
print STDOUT "Perl'un tam adresi kendi icindeki gosterimi : $paddress\n";
socket(TO_SERVER, PF_INET, SOCK_STREAM, $protocol) or die ("Soket olusturulamadi : $!");
print STDOUT "... soket olusturuldu ...\n";
connect(TO_SERVER, $paddress) or die ("$remote_host uzerine $remote_port portundan baglanti yapilamadi: $!");
print STDOUT "... baglanti kuruldu ...\n";
select(TO_SERVER); # SERVER'i varsayilan tasiyici yaptik
$| = 1; # Tamponunu temizle
print STDOUT "\n$remote_host:$remote_port baglantisi yapildi.";
print STDOUT "Merhaba. Bu bir istemci cagrisi\n";
print TO_SERVER "Merhaba. Bu bir istemci cagrisi\n";  #sunucuya
$input = <TO_SERVER>; # sunucudan girdi al
print STDOUT "Sunucudan bir mesaj var: $input\n"; # kendi ekranimizda girdiyi goster
print STDOUT "Cevap yaziniz => ";
while( defined($to_server = <STDIN>) ) {
 if ($to_server eq "\n" or $to_server =~ m/^(q|Q|(quit)|(Quit)|(QUIT)|\\n)/) {#girdigimiz istegin ne oldugunu kontrol ediyoruz
  print STDOUT "... baglanti kapaniyor ...\n";
  print TO_SERVER " istemci ayriliyor \n";
  close TO_SERVER;
  last;
 }
 print TO_SERVER "$to_server"; # sunucuya kullanicimizdan gelen istegi gonderiyoruz
 $input = <TO_SERVER>;  # sunucudan karsiligini al
 chomp $input;
 print STDOUT "\nSunucu istege cevap verdi: $input";  #print server response locally
 print STDOUT "\nIstekte bulununuz => "
}
print STDOUT "Alinan son mesaj $to_server\n";
print TO_SERVER "quit\n";
close TO_SERVER;    # baglantiyi kapattigimizi garanti altina aliyoruz
Yazar: Hamdi
Kategori: Perl / CGI
Düzey: Düzey
Eklenme Tarihi: 2007-11-09
Okunma: 522
Puan: 0
Yorum sayisi: 0

Yorumlarınız(0)




2004-2009 © Programlama Rehberi, tüm hakları saklıdır.