Client-Server Örnekleri (Perl - Python)
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.