Python Socket Kullanım Kılavuzu

Python Socket Nedir?

Python’da socket, ağ üzerinden veri iletişimi sağlayan bir arayüzdür. Genel olarak, bir istemci ve sunucu arasında iletişim kurmak için kullanılır. Socket programlama ile, farklı bilgisayarlar arasında veri alışverişi yapabiliriz. Bu, bilgisayar ağlarını anlamak ve yönetmek için kritik bir beceridir, özellikle de internet tabanlı uygulamalar geliştirirken.

Socket’ler, TCP (Transmission Control Protocol) ve UDP (User Datagram Protocol) olmak üzere iki ana protokolü destekler. TCP, veri paketlerinin güvenli bir şekilde iletilmesini sağlarken, UDP daha hızlı bir şekilde veri aktarımı yapar, ancak veri kaybı yaşanabilir. Python’un standart kütüphanesi, her iki protokol için de kolay kullanımlı socket modülleri sunar.

Python Socket Modülüne Giriş

Python’da socket modülünü kullanmak için, öncelikle bu modülü programınıza dahil etmeniz gerekiyor. Bunun için, Python’un yerleşik socket kütüphanesini kullanmalısınız. İşte socket modülünü nasıl dahil edeceğinize dair basit bir örnek:

import socket

Bu kod parçası, socket modülünü projenize dahil eder. Modülü dahil ettikten sonra socket nesneleri oluşturarak ağ ile iletişim kurmaya başlayabilirsiniz. Socket programlamaya bir örnek vermeden önce, bu modülün hangi özelliklere sahip olduğunu bilmek faydalıdır.

Socket Oluşturma

Socket oluşturmak için, socket() fonksiyonunu kullanırız. Bu fonksiyon, iki ana parametre alır: socket türü ve protokol. İşte bir TCP soketi oluşturmanın temel adımları:

my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Burada AF_INET, IPv4 adresleme sistemini belirtirken; SOCK_STREAM, TCP protokolünü kullandığımızı gösterir. UDP kullanmak isterseniz, SOCK_DGRAM kullanmalısınız. Şimdi, temel bir socket oluşturduk. Şimdi bu socket’i bir sunucua bağlayalım.

Sunucuya Bağlanmak

Oluşturduğunuz socket ile bir sunucuya bağlanmak için, connect() metodunu kullanmalısınız. Bu metod, sunucunun IP adresini ve portunu talep eder:

my_socket.connect(("127.0.0.1", 8080))

Yukarıdaki örnekte, 127.0.0.1 yerel makinenin IP adresini temsil eder. Port numarası olarak 8080 kullanılmıştır. Bu temel bağlantıyı kurduktan sonra, sunucu ile veri alışverişi yapabilirsiniz. Şimdi, sunucuya veri gönderme işlemini inceleyelim.

Veri Gönderme ve Alma

Socket ile bir sunucuya veri göndermek için send() metodunu kullanabilirsiniz. Aşağıda basit bir örnek görmektesiniz:

my_socket.send(b"Merhaba, Sunucu!")

Bu kod, sunucuya “Merhaba, Sunucu!” mesajını gönderir. Burada dikkat etmeniz gereken nokta, verilerin bytes formatında gönderileceğidir. Bu yüzden, dizeyi bytes’a dönüştürmek için başına b eklenmiştir. Sunucuya veri gönderirken, bağlantının kesilmediğinden emin olmalısınız. Şimdi, sunucudan veri alma işlemini inceleyelim.

Veri Alma İşlevi

Sunucudan veri almak için recv() metodunu kullanmalısınız. Bu metod, belirtilen boyutta veri almanızı sağlar:

data = my_socket.recv(1024)

Bu örnekte, sunucudan 1024 byte’lık veri alınır ve data değişkenine atanır. En iyi veri boyutunu belirlemek için uygulamanızın gereksinimlerini göz önünde bulundurmalısınız. Aldığınız veri daha sonra işlenebilir ya da görüntülenebilir.

Bağlantıyı Kapatma

Socket ile işiniz bittiğinde, bağlantıyı kapatmayı unutmayın. Bağlantıyı kapatmak için close() metodunu kullanın:

my_socket.close()

Bu, socket’in tüm kaynaklarını serbest bırakır ve başka bir uygulamanın bu portu kullanabilmesini sağlar. Hatalı bağlantılardan kaçınmak için her zaman bu adımı gerçekleştirin.

Socket Sunucusu Oluşturma

Artık istemci tarafındaki socket kullanımı hakkında bilgi sahibiyiz. Şimdi basit bir socket sunucusu oluşturalım. Bir socket sunucusu, dinleme modunda çalışan ve istemcilerden gelen bağlantıları kabul eden bir uygulamadır. İlk olarak, socket’i oluşturmalı ve ardından bind() metodunu kullanarak bir IP adresi ve port numarası bağlamalısınız:

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("0.0.0.0", 8080))

Burada 0.0.0.0, sunucunun tüm ağ arayüzlerinden gelen bağlantıları kabul etmesini sağlar. Daha sonra, sunucunuzu dinleme moduna almak için listen() metodunu çağırmalısınız:

server_socket.listen(5)

Bu, sunucunun en fazla 5 bağlantıyı aynı anda beklemesine olanak tanır. Şimdi istemcilerin bağlantı taleplerini kabul etmeye hazırsınız.

İstemci Bağlantısını Kabul Etme

Bir istemciden gelen bağlantıyı kabul etmek için accept() metodunu kullanabilirsiniz. Bu metod, istemci ile yeni bir socket nesnesi döndürür:

client_socket, addr = server_socket.accept()

İstemcinin bilgileri addr değişkeninde saklanır. Şimdi, istemciden veri alabilir ve yanıt verebilirsiniz. İşte veri alma ve yanıt verme işlemi için bir örnek:

data = client_socket.recv(1024)
client_socket.send(b"Veri alındı!")

Bu noktada istemci ile sunucu arasındaki temel iletişimi kurmuş oldunuz. Son olarak, istemci ile bağlantıyı kapatmayı unutmayın.

Örnek Uygulama

Şimdi, öğrendiklerimizi bir uygulama üzerinde toplayalım. Basit bir istemci-sunucu uygulaması oluşturacağız. Socket sunucusu, istemciden gelen mesajı alacak ve bir yanıt verecek. İşte tam bir örnek:

# Sunucu Kodu
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("0.0.0.0", 8080))
server_socket.listen(5)

print("Sunucu dinliyor...")

while True:
    client_socket, addr = server_socket.accept()
    print(f"Bağlantı: {addr}")
    data = client_socket.recv(1024)
    print(f"Alınan veri: {data.decode()}")
    client_socket.send(b"Veri alındı!")
    client_socket.close()

Yukarıdaki kod kesiminde sunucu, sürekli olarak bağlantıları dinler ve her bir bağlantıda veriyi alıp yanıt göndermektedir. Şimdi istemci tarafıyla da benzer bir örnek yapacağız.

İstemci Kodu

İstemci kodunu da aşağıdaki gibi yazabiliriz:

# İstemci Kodu
import socket

my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.connect(("127.0.0.1", 8080))
my_socket.send(b"Merhaba, Sunucu!")
response = my_socket.recv(1024)
print(response.decode())
my_socket.close()

Bu örnekteki istemci, sunucuya “Merhaba, Sunucu!” mesajını gönderir ve sunucudan gelen yanıtı alıp ekrana yazdırır. Bu basit uygulama ile, Python kullanarak socket programlamanın temel adımlarını öğrenmiş olduk.

Sonuç

Python socket modülü, ağ programlama için son derece kullanışlı ve esnek bir araçtır. Temel istemci ve sunucu uygulamaları oluşturarak, ağ üzerindeki verileri kolaylıkla iletişim kurabilirsiniz. Socket programlama ile, çevrimiçi oyunlar, sohbet uygulamaları veya veri aktarım sistemleri gibi birçok proje geliştirebilirsiniz. Yeni başlayanlar için, socket’lerle oynamaya başlamak eğlenceli bir yol olabilir; pratik yaptıkça karmaşık uygulamalar inşa etme yeteneğiniz artacaktır.

Bu yazıda, Python socket modülünün temel işlevlerini, istemci ve sunucu oluşturmanın yollarını, veri gönderme ve alma yöntemlerini ayrıntılı olarak inceledik. Fordirilebileceğiniz ve geliştirebileceğiniz birçok projeniz olması için bu beceriler oldukça değerlidir. Şimdi kendi projelerinizi yaratma zamanı!

Scroll to Top