Python Socket Programlama: Sunucu ve İstemci Temelden Kurmak
Socket programlama, iki bilgisayar arasında veri iletişiminin temelini oluşturur. Python'da bunu yapmak basit; `socket` modülü ile başlayabilirsin. Önce basit bir sunucu-istemci ikilisini kuralım, sonra birden fazla bağlantıyı aynı anda nasıl yönetileceğini göreceğiz.
Basit bir sunucu yazmaktan başla. Sunucu, belirli bir port'ta dinler ve gelen istemcileri kabul eder. temel yapı:
1import socket23# Sunucu soketi oluştur4server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)5server.bind(('localhost', 5000))6server.listen(1)7print("Sunucu 5000 portunda dinliyor...")89# Bağlantı kabul et10connection, address = server.accept()11print(f"Bağlantı geldi: {address}")1213# Veri al ve gönder14data = connection.recv(1024)15print(f"Alınan: {data.decode()}")16connection.send(b"Merhaba istemci!")17connection.close()18server.close()İstemci tarafı da benzer; sunucuya bağlanıp veri gönderir:
1import socket23client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)4client.connect(('localhost', 5000))5client.send(b"Merhaba sunucu!")6response = client.recv(1024)7print(f"Yanıt: {response.decode()}")8client.close()Ancak bu yapı tek bir istemciyi işler; diğer bağlantılar beklemek zorunda kalır. Çoklu bağlantıları engelleme olmadan yönetmek için `select` modülünü kullan. Böylece sunucu, birden fazla istemciyi aynı anda dinleyebilir:
1import socket2import select34server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)5server.bind(('localhost', 5000))6server.listen(5)7server.setblocking(False)89connections = [server]10print("Sunucu çalışıyor...")1112while True:13readable, _, _ = select.select(connections, [], [])14for sock in readable:15if sock is server:16try:17conn, addr = sock.accept()18conn.setblocking(False)19connections.append(conn)20print(f"Yeni bağlantı: {addr}")21except:22pass23else:24try:25data = sock.recv(1024)26if data:27print(f"Alınan: {data.decode()}")28sock.send(b"Mesaj alındı")29else:30connections.remove(sock)31sock.close()32except:33pass`select` modülü, hangi soketlerin veri için hazır olduğunu kontrol eder ve sadece onları işler. Bu sayede sunucu, on, yüz hatta binlerce istemciyi etkili bir şekilde yönetebilir. Üretim ortamında daha ölçeklenebilir çözümler için `asyncio` ya da `threading` kullanabilirsin, ama bu temel yapı socket programlamanın kalbidir.
0 yorum