Merhaba arkadaşlar bugün, “Python programlama dili ile veri alışverişi nasıl yapılır?” sorusunu cevaplayacağız.
Öncelikle veri alışverişinin sağlanması için en az 2 adet bilgisayara ihtiyaç duyulur. Bunlardan birisi sunucu(server) diğeri istemci(client) olarak adlandırılır. Veri alışverişine başlamadan önce Server’ın çalışır vaziyette olduğundan emin olunmalı ve Server’ın İP adresi ve hangi porttan bağlanılacağı bilinmelidir.
Port: Bilgisayarlarda bağlantı amacıyla kullanılan ve sayılarla itham edilen bağlantı araçlarıdır. Port’lar kimi zaman sanal olurken kimi zaman fax, HDMI, hoparlör girişi gibi olur.
Server çalışır vaziyette olduğu sürece gelen bağlanı olup olmadığını sahip olduğu ip adresini ve port’u dinler. Bu sırada istemci yani client, server’a bağlantı isteği yollar duruma göre server isteği kabul eder veya reddeder.
Genel client-server çalışma mantığı bu şekildedir. Python’da bu işler nasıl yapılır inceleyelim. Bunun için 2 adet script açıp birinin adına server.py diğerinin adına client.py yazalım.
Script’leri açıp yan yana koyalım ve yazmaya başlayalım. İkisinde de giriş kısmı aynı ve şu şekilde olacak:
import socket
host = "localhost"
port = 4646
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1. Satır: Bilgisayarlar arası iletişim sağlarken kullanacağımız fonksiyonlara sahip modülü programımıza aktarıyoruz.
2. Satır: Programın nerede çalışacağını belirtiyor. Burada localhost yazmamızın sebebi aynı bilgisayar içinde server’ı ve client’i çalıştıracak olmamızdır. Eğer client ve server farklı bilgisayarlarda çalışacaksa server’ın ip adresi string olarak yazılır.
3. Satır: Bağlantının hangi port üzerinden sağlanacağı belirtiliyor. Burada port sayısı 60000’e kadar olabilir belki daha fazla.
4. Satır: Socket objemizi oluşturuyoruz. Parantez içinde yazılanlar hemen hemen her programda aynıdır. Sadece socket metodunun 2. parametresi bazen socket.SOCK_DGRAM olabilir. SOCK_STREAM, SOCK DGRAM’a göre daha hızlı çalışmasına rağmen arada veri kaybı ile karşılaşılabilir. Eğer aldığınız veri çok önemli ise SOCK_DGRAM’ı kullanmanızı öneririm.
Buradan itibaren client ve server için ayrı ayrı yazıyoruz.
Client.py
import socket
host = "localhost"
port = 4646
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.connect((host, port))
Server.py
import socket
host = "localhost"
port = 4646
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.bind((host, port))
my_socket.listen(1)
con, addr = my_socket.accept()
Buraya kadar bağlantı kısmını hallettik. Server dosyası altında yaptıklarımız sırasıyla; host’u ve port’u bind etmek -bu host’dan bu port sorumlu gibi düşünebilirsiniz.-, gelen bağlantıları my_socket.listen(1) ile dinlemek ve son olarak gelen 1 adet bağlantıyı accept metodu ile kabul etmek. Bu kabul sonunda con ve addr adaında 2 farklı değişkene daha sahip oluyoruz. con değişkenini veri aktarımında kullanacağız.
NOT: listen içerisine kaç yazarsanız o kadar bağlantı beklenir
Client dosyası altında yaptığımız tek şey server’a connect metodu ile bağlanmak. Bağlantı kurulumu tamamlandığına göre veri aktarımına başlayabiliriz.
Client.py
import socket
host = "localhost"
port = 4646
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.connect((host, port))
data = my_socket.recv(1024)
print(data.decode())
my_socket.send(b"Merhaba")
my_socket.close()
Server.py
import socket
host = "localhost"
port = 4646
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.bind((host, port))
my_socket.listen(1)
con, addr = my_socket.accept()
con.send(b"Server'a hosgeldin")
data = con.recv(1024)
print(data.decode())
my_socket.close()
Server’dan send ile byte verisi aktarıyoruz. Send metodu içinde “ işaretinden önce kullandığımız b harfi string’i byte’a çevirmekle görevlidir. Bu işlemle birlikte aynı zamanda, client dosyası altında recv metodu çalışır ve recv metodu ile veri alırız. Aldığımız verinin tipi byte’dır. Bir alt satırda ki decode metodu ile byte olan veri tipini string haline getiriyoruz. En son satırda ise socket objemizi kapatıyoruz. Başka bir programda aynı portu kullanabilmek için socket objemizi kapatmak zorundayız. Bir sonraki programda görüşmek üzere; sevgiler, saygılar sunarım.
Hocam farklı ağlarda bulunan iki bilgisayarın haberleşmesini sağlamak istersek ne yapmalıyız ?
ngrok kullanabilirsin ben yapmıştım.Internette araştırırsan nasıl yapacağını öğrenebilirsin.