Giriş
TCP (Transmission Control Protocol) soketleri, ağ üzerinden veri iletimi gerçekleştiren yazılımların temellerinden biridir. Python, bu soketlerle çalışmak için oldukça uygun bir dil olarak öne çıkıyor. Bu yazıda, Python kullanarak basit bir TCP soket sunucusu oluşturmayı öğreneceğiz. Her adımı detaylı bir şekilde açıklayarak, konunun karmaşık noktalarını anlaşılır hale getireceğiz.
TCP, verilerin güvenilir bir şekilde iletilmesini sağlar. Soket sunucuları, istemcilerle iletişim kurmak için ihtiyaç duyulan yapılardır. Bu yazı sayesinde, kendi TCP soket sunucunuzu hızlı bir biçimde oluşturabileceksiniz. Hadi başlayalım!
Python’da Soket Modülü ile Tanışma
Python’da soketlerle çalışabilmek için öncelikle “socket” adlı modülü kullanmamız gerekecek. Bu modül, soket oluşturma, bağlantı sağlama ve veri iletimi gibi temel işlevleri yerine getirir. Ayrıca hem istemci hem de sunucu modunda çalışabilme yeteneğine sahiptir. Python’un standart kütüphanesi içinde yer aldığı için ek bir yükleme gerektirmemektedir.
Aşağıda, soket modülünü nasıl kullanacağımıza dair kısa bir örnek vermek gerekirse:
import socket
Bu kadar basit! Artık soket modülünü kullanmaya hazırız. İlerleyen adımlarda soket nesnelerini nasıl oluşturacağımızı göreceğiz.
TCP Soket Sunucusu Oluşturma
Bir TCP soket sunucusu oluşturmak için önce bir soket nesnesi oluşturmalıyız. Bunun için kullanacağımız temel adımlar şunlardır:
- Soket nesnesi oluşturma
- Bağlantı adresini ayarlama
- Soketi dinlemeye alma
- İstemcilerle bağlantı kurma
Bu adımları izleyerek basit bir soket sunucusu oluşturabiliriz. Şimdi her adımı detaylı olarak inceleyelim.
Soket Nesnesi Oluşturma
Öncelikle bir TCP soketi oluşturmalıyız. Bunu yapmak için soket modülündeki socket.socket()
fonksiyonunu kullanırız. Aşağıdaki kod ile soket nesnemizi oluşturabiliriz:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Burası önemli bir noktadır. AF_INET
, IPv4 adreslerini kullanmak için gerekli olan aileyi belirtirken, SOCK_STREAM
ise TCP protokolünü kullanacağımızı gösterir.
Bağlantı Adresini Ayarlama
Sunucu soketimizi oluşturduktan sonra, hangi IP adresine ve hangi porta dinleme yapacağımızı belirtmeliyiz. Bunun için bind()
fonksiyonunu kullanabiliriz. Örneğin, sunucumuzun localhost üzerinde 65432 portunda dinlemesini istiyorsak, kodumuz şöyle olmalıdır:
server_socket.bind(('localhost', 65432))
Burada, 'localhost'
adresini kullanarak sunucunun yerel makinede çalışmasını sağlıyoruz. Eğer başka bir IP adresi kullanırsanız, istemcilerin bu adrese bağlanabilmesi gerekir.
Soketi Dinlemeye Alma ve İstemci Bağlantılarını Karşılama
Şimdi, dinleme işlemini başlatmalıyız. Bunun için listen()
fonksiyonunu kullanacağız. Aşağıdaki kod ile sunucumuzu dinlemeye başlayabiliriz:
server_socket.listen()
Dinleme işlemi başlatıldığında, sunucu gelen bağlantıları kabul etmeye hazır hale gelir. Şimdi istemcilerin bağlanabilmesi için döngü oluşturmamız gerekiyor. Aşağıdaki kod parçacığı, istemcilerle bağlantı kurmanın temelini atar:
while True:
client_socket, addr = server_socket.accept()
print(f'Bağlantı kabul edildi: {addr}')
Burada, accept()
metodu, bir istemcinin bağlanmasını bekler. Bir bağlantı kabul edildiğinde, client_socket
adında bir soket oluşturur ve bağlantının adresini addr
değişkenine atar.
Veri Gönderme ve Alma
Artık istemciyle bağlantı kurduğumuza göre, veri gönderebilir veya alabiliriz. Öncelikle istemciden veri almak için recv()
fonksiyonunu kullanacağız:
data = client_socket.recv(1024)
Bu kod, istemciden en fazla 1024 byte boyutunda veri alır. Gelen veriyi ekranda göstermek için:
print(f'Alınan veri: {data.decode()}')
Yukarıdaki kodda decode()
işlevi, bayt verisini string formatına dönüştürmek için kullanılır. Şimdi, istemciye yanıt gönderebiliriz:
client_socket.sendall(b'Hosgeldin!')
Bu kod, istemciye “Hoşgeldin!” mesajını gönderecektir. Eğer birden fazla istemci ile çalışmak istiyorsanız, her istemcinin bağlantısını dinlemeniz ve yanıtlarınızı özelleştirmeniz gerekecektir.
Soket Bağlantısını Kapatma
Bağlantı işimizi bitirdikten sonra, istemci ve sunucu soketlerini kapatmalıyız. Bunu yapmak için close()
metodunu kullanıyoruz:
client_socket.close()
server_socket.close()
Bu aşamada, her iki soket de kapatılır ve sistem kaynakları serbest bırakılır. Bağlantıyı kapatmayı unutmayın; aksi halde bellek sızıntıları meydana gelebilir.
Basit Bir TCP Soket Sunucu Örneği
Şimdi tüm bu adımları bir araya getirerek basit bir TCP soket sunucusu oluşturalım:
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 65432))
server_socket.listen()
print('Sunucu dinlemede...')
while True:
client_socket, addr = server_socket.accept()
print(f'Bağlantı kabul edildi: {addr}')
data = client_socket.recv(1024)
print(f'Alınan veri: {data.decode()}')
client_socket.sendall(b'Hosgeldin!')
client_socket.close()
server_socket.close()
Bu basit sunucu kodu, gelen bağlantıları kabul eder, istemciden veri alır ve yanıt verir. Sunucuyu başlattığınızda, “Sunucu dinlemede…” mesajını göreceksiniz. İstemcilerle etkileşimde bulunabilir ve bağlantıyı kapatabilirsiniz.
Sonuç
Bu yazıda Python kullanarak nasıl basit bir TCP soket sunucusu oluşturacağınızı öğrendiniz. Soketlerin temelleri üzerinden geçerek sunucunun nasıl yapılandırılacağını, veri gönderimini ve alımını detaylı bir şekilde inceledik. Artık, kendi projelerinizde bu bilgileri rahatlıkla uygulayabilir ve daha gelişmiş uygulamalar geliştirebilirsiniz.
Unutmayın, her zaman yeni şeyler denemek ve kendi projelerinizi oluşturmak için bu bilgileri kullanabilirsiniz. Geliştirici dünyasında öğrenme süreci asla sona ermez. Sadece adım atın ve yaratıcı olun!