Ağ ve Sistem mühendislerinin uzman oldukları alanda programlama yapmabilecekleri ya da Python yazılımcılarının ağ sistemleri alanında geliştirme yapabilecekleri bir uzmanlık sahasıdır.
Ağ programlamada Pyhton dili önemli bir rol oynar. Python’un standart kitaplığı, ağ protokolleri, verilerin kodlanması ve kodunun çözülmesi ve diğer ağ kavramları için oldukça geniş bir desteğe sahiptir. Vakti zamanında C++ ile yazılan ağ programlarını bugün Python’da yazmak daha kolay.
Network Programlama yapabilmek için, Algoritma ve Programlama, Programlama alanında Socket ve Web Programlama, Üst Seviye İstemci Modülleri, Temel Ağ Teknolojileri ve Kavramları konularında bilgi sahibi olmak gerekiyor.
Python Ağ Servisleri
Python’da Düşük Düzey Erişim ve Üst Düzey Erişim olmak üzere iki ağ servis erişim düzeyi vardır. Düşük Düzey Erişim, programcılar çeşitli Python kitaplıklarını kullanarak işletim sistemi için temel soket desteğini kullanabilmekteler ve programlama için hem bağlantısız hem de bağlantı yönelimli protokolleri uygulayabilmektedirler.
Uygulama düzeyindeki ağ protokollerine ( HTTP, FTP gibi) Python kitaplıkları tarafından sağlanan üst düzey erişim kullanılarak da erişilebilir.
Socket (Soket) Nedir?
Soket, bir ağ üzerinden çalışan iki program veya iletişim kanalı arasındaki iletişim akışındaki son noktadır. Soket API’si (Uygulama Programlama Arayüzü) adı verilen bir dizi programlama isteği kullanılarak oluşturulurlar. Python’un soket kitaplığı, genel aktarımları genel bir arabirim olarak işlemek için sınıflar sunar.
Soketler, istemci ve sunucu arasındaki bir bağlantı noktasından diğer bağlantı noktasına iletişim için bağlantı türünü belirlemek adına protokoller kullanır.
Bu protokollere örnek olarak DNS (Alan Adı Sunucuları), IP (IP Adresleme), FTP (Dosya Aktarım Protokolü) ve benzerlerini gösterebiliriz.
Python, ayrıca programcıların sanal olarak farklı soket türleri oluşturmasına olanak sağlayan bir soket yöntemini de içerir.
Soket yönteminin sözdizimi:
g = socket.socket (socket_family, type_of_socket, protocol=value)
Örneğin bir TCP soketi kurmak istersek aşağıdaki kod parçalarını yazabiliriz:
from socket import * #socket paketinden her şeyi dahil et
tcp1=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# socket.socket() - kullandığımız fonksiyon
Soketi tanımladıktan sonra, bağlantıları yönetmek için çeşitli metotlar kullanılır. Soket metotlarından bazıları;
listen(): TCP dinleyicisini kurmak ve başlatmak için kullanılır.
bind(): adresi (host-name, port numarası) sokete bağlamak için kullanılır.
accept(): Bağlantı gelene kadar TCP client bağlantısı için kullanılır.
connect(): TCP sunucu bağlantısını başlatmak için kullanılır.
send(): TCP mesajlarını göndermek için kullanılır.
recv(): TCP mesajlarını almak için kullanılır.
sendto(): UDP mesajlarını göndermek için kullanılır.
close(): Bir soketi kapatmak için kullanılır.
Örnek proje;
import socket
T_PORT = 60
TCP_IP = '127.0.0.1'
BUF_SIZE = 30
# k isminde bir obje yaratıyoruz
k = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
k.bind((TCP_IP, T_PORT))
k.listen(1)
con, addr = k.accept()
print ('Connection Address is: ' , addr)
while True :
data = con.recv(BUF_SIZE)
if not data:
break
print ("Received data", data)
con.send(data)
con.close()
Server.py olarak kaydedelim.
Dosyayı çalıştırdığımız zaman 60 numaralı bağlantı portunda bir web sunucusu açacaktır. Yukarıdaki programda, istemci tarafında yazılan her şey sunucuya aktarılacaktır.
İstemci (Client) tarafında ise;
import socket
T_PORT = 5006
TCP_IP = '127.0.0.1'
BUF_SIZE = 1024
MSG = "Hello karl"
# k isminde bir obje yaratıyoruz
k = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
k.connect((TCP_IP, T_PORT))
k.send(MSG)
data = k.recv(BUF_SIZE)
k.close
Sonuç olarak, soket programlama ile istemci-sunucu mimarisi kurulur böylece istemcinin bir sunucuya veri isteği yaptığı ve sunucunun bu makinelere yanıt verdiği bir ağ ortamı kurulur.