Perl Client-Server

      Burada Perl dilini kullanarak bir Client-Server uygulaması gerçekleştirmeye çalıştım. Tabiki olmazsa olmaz diyerek Socket kütüphanesini import ediyoruz. IO::Socket::INET ,AF_INET (ARPA Internet protocols) domain socketleri için nesne arayüzüdür. Bu sınıfı kullanarak bir nesne oluşturacağız. Bu nesne constractoru içerisinde aşağıdaki değişkenler bulunabilir.

  • 1. PeerAddr
  • 2. PeerHost
  • 3. PeerPort
  • 4. LocalAddr
  • 5. LocalHost
  • 6. LocalPort
  • 7. Proto
  • 8. Type
  • 9. Listen
  • 10. ReuseAddr
  • 11. Reuse
  • 12. ReusePort
  • 13. Broadcast
  • 14. Timeout
  • 15. MultiHomed
  • 16. Blocking

Biz buradan :

LocalHost : Yerel makina bağlantı adresi

LocalPort : Yerel makina bağlantı portu

Proto : Bağlanti Protolü

Listen : Dinlemek için queue boyutu

PeerAddr : Uzak makina bağlantı adresi

PeerPort : Uzak makine bağlantı portu

değişkenlerini kullanacağız.

      Bağlantı kurulacak port numarasını dışarıdan input olarak alınmasını belirledik fakat genelde yüksek numaralı portlar tercih edilir.

      Uygulama basit bir yazışma uygulaması olarak düşünülebilir. Karşı taraf için bir socket tanımlayıp bağlantı beklenmeye başlanır . Bu socket karşı tarafın adresini ve port numarasını içerir. Bağlantı sağlanınca devamında ‘basit’ yazışma kanalına girilir. Burada önce server tarafı ve sonra client tarafı yazmak koşuluyla iletişim sağlanır.

Server Kısmı

#!/usr/bin/perl

use IO::Socket;
$| = 1;

print "Port numarası giriniz...\n";
my $port=<STDIN>;

$socket = new IO::Socket::INET (
LocalHost => '127.0.0.1',
LocalPort => $port,
Proto => 'tcp',
Listen => 5,

);

die "Port açılamadı!" unless $socket;
print "Bağlantı bekleniyor...Port : $port\n ";

while(1)
{
    	$client_socket = "";
    	$client_socket = $socket->accept();
    	$peer_address = $client_socket->peerhost();
    	$peer_port = $client_socket->peerport();

    	print "\n CTRL Chat Server'a  Bağlantı Kuruldu. ( $peer_address , $peer_port ) \n";
    	
while (1)
{
    	$giden_veri = <STDIN>;
	my $user1 = "Hakan: ";
	$client_socket->send($user1);
    	$client_socket->send($giden_veri);
    	$client_socket->recv($gelen_veri,30);
    	print $gelen_veri;
    	$client_socket->autoflush(); 

    }

}

      Client tarafı için yine aynı şekilde bir socket nesnesi oluşturuyoruz. PeerAddr olarak görünen yer server adresidir. PeerPort ise server’ın hangi portundan bağlantı sağlanacağıdır. Burada yine dışarıdan port numarasını input alarak ilerledik.Aynı port numarası girildiğinde bağlantı sağlanır. Bağlantı kurulunca yazışma kanalına geçilir ve belirtilen kurallar dahilinde iletişim sağlanabilir.

Client Kısmı

#!/usr/bin/perl

use IO::Socket;

print "Port numarası giriniz...\n";
my $port=<STDIN>;


$socket = new IO::Socket::INET (
	PeerAddr  => '127.0.0.1',
	PeerPort  =>  $port,
	Proto => 'tcp',
)

or die "Bağlantı Kurulamadı !\n";

while (1)
{
    	$socket->recv($gelen_veri,30);
    	print $gelen_veri."\n";
    	$giden_veri = <STDIN>;
	my $user2 = "Kullanici : ";
	$socket->send($user2);
    	$socket->send($giden_veri);
}

Python Client-Server

Server Kısmı

import socket
import socketserver
import threading 

class threadexample (threading.Thread): 
   		def __init__(self, threadID, name):
   			threading.Thread.__init__(self)
   			self.threadID=threadID
   			self.name = name
   		def run(self):
   			while True:
     		a=baglanti.recv(1000)
     		print(a.decode())
   
class threadexample2 (threading.Thread):
   		def __init__(self, threadID, name):        
    		threading.Thread.__init__(self)
    		self.threadID=threadID
    		self.name = name
   		def run(self): 
   			while True:
       		a=input("Server: ") 
       		baglanti.send(a.encode())


myserver=socket.socket()
mylocal=socket.gethostname()

myserver.bind((mylocal,3969))
myserver.listen(5)

while True:
		baglanti, adress = myserver.accept()
		print("Bağlantı Sağlandi..."  )
		print(adress)
		thread1=threadexample(1,"recv")
		thread1.start()
		thread1=threadexample2(2,"send")
		thread1.start()

Client Kısmı

import socket
import sys
import threading

class threadexample (threading.Thread):
		def __init__(self, threadID, name):        
    		threading.Thread.__init__(self)
    		self.threadID=threadID
    		self.name = name
		def run(self):
    		while True:
      		a=mysocket.recv(1000)
      		print(a.decode())
    
class threadexample2 (threading.Thread):
		def __init__(self, threadID, name):    
     		threading.Thread.__init__(self)
     		self.threadID=threadID
     		self.name = name
		def run(self):        
    		while True:
        		a=input("Client: ")
        		mysocket.send(a.encode())


mysocket=socket.socket()

#host="0x6cac60.github.io"
#addres=socket.gethostbyname(host)
mylocal=socket.gethostname()
port=3969

mysocket.connect((mylocal,port))
a="selam".encode()
mysocket.send(a)
#while True: 
thread1=threadexample(1,"recv")
thread2=threadexample2(3,"sxend")
thread1.start()
thread2.start()

      Bu konu literatürde socket programlama olarakta geçer.Bu yazışma programı Socket programlama kapsamında basit bir Client-Server uygulamasıdır.