Soket programlama, iki veya daha fazla bilgisayar arasında veri iletimi sağlamanın temel yoludur. Bu, ağ üzerinde verilerin nasıl iletileceğini anlamak için önemlidir. Python, ağ uygulamaları geliştirmek için oldukça güçlü ve kullanımı kolay bir araçtır. Bu eğitimde, Python kullanarak basit bir TCP sunucu ve istemci uygulaması oluşturacağız.
Neden Soket Programlama Öğrenmeliyiz?
- Ağ İletişimi: Birçok modern uygulama ağ üzerinden veri iletimini gerektirir. Soket programlama, bu veri iletiminin nasıl gerçekleştirileceğini anlamanıza yardımcı olur.
- Gerçek Zamanlı Uygulamalar: Sohbet uygulamaları, oyunlar ve canlı veri akışları gibi gerçek zamanlı uygulamalar soket programlamayı kullanır.
- Veri Güvenliği ve Performans: Soket programlama ile verilerin nasıl güvenli bir şekilde iletileceğini ve performansın nasıl artırılacağını öğrenebilirsiniz.
- Yüksek Performanslı Sistemler: Büyük veri setleri ile çalışan sistemlerde verimlilik ve performansı artırmak için soket programlama gereklidir.
1. Temel Kavramlar
- Soket Nedir?
- Bir ağ üzerindeki iki işlem arasında veri iletimi sağlamak için kullanılan bir uç noktadır.
- TCP (Transmission Control Protocol) ve UDP (User Datagram Protocol) gibi protokoller üzerinde çalışabilir.
- TCP ve UDP
- TCP: Bağlantı tabanlı bir protokoldür, veri iletiminde güvenilirlik sağlar.
- UDP: Bağlantısız bir protokoldür, daha hızlıdır ancak veri kaybı yaşanabilir.
2. Basit Bir TCP Sunucu ve İstemci
- Sunucu Tarafı:
- Amaç: İstemciden gelen verileri alır ve geri gönderir.
- Kod:
Python:
import socket def start_server(host='127.0.0.1', port=65432): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket: server_socket.bind((host, port)) server_socket.listen() print(f"Sunucu {host}:{port} adresinde dinleniyor...") while True: conn, addr = server_socket.accept() with conn: print(f"Bağlantı kabul edildi: {addr}") while True: data = conn.recv(1024) if not data: break print(f"Alınan veri: {data.decode()}") conn.sendall(data) if __name__ == "__main__": start_server()
- Açıklama:
- socket.socket(): TCP/IP soketi oluşturur.
- bind(): Sunucunun IP adresi ve portunu ayarlar.
- listen(): Gelen bağlantıları dinler.
- accept(): Bir bağlantıyı kabul eder.
- recv(): Veriyi alır.
- sendall(): Veriyi geri gönderir.
- İstemci Tarafı:
- Amaç: Sunucuya bağlanır, veri gönderir ve yanıt alır.
- Kod:
Python:
import socket def start_client(host='127.0.0.1', port=65432, message='Merhaba, dünya!'): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket: client_socket.connect((host, port)) client_socket.sendall(message.encode()) data = client_socket.recv(1024) print(f"Sunucudan gelen veri: {data.decode()}") if __name__ == "__main__": start_client()
3. Gelişmiş Konular
- Hata Yönetimi: Hataları ve istisnaları nasıl yöneteceğiniz hakkında bilgi.
- Veri Şifreleme: Verilerinizi güvenli bir şekilde iletmek için şifreleme yöntemleri.
- Performans İyileştirme: Soket bağlantılarının performansını artırma teknikleri.
4. Uygulama Senaryoları
- Chat Uygulamaları: Kullanıcılar arasında mesajlaşmak için soket programlama.
- Oyunlar: Çok oyunculu oyunlar için veri iletimi.
- Veri Akışları: Canlı veri akışı ve analiz.