Kaydol

Giriş Yap

Parolanızı mı unuttunuz

Şifreni mi unuttun? Lütfen e-mail adresinizi giriniz. Bir bağlantı alacaksınız ve e-posta yoluyla yeni bir şifre oluşturacaksınız.

Üzgünüz, gönderi ekleme izniniz yok.

Python’da Bilgisayarlar Arası Veri Alışverişi

    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.

2 Yorum

  1. Hocam farklı ağlarda bulunan iki bilgisayarın haberleşmesini sağlamak istersek ne yapmalıyız ?

  2. ngrok kullanabilirsin ben yapmıştım.Internette araştırırsan nasıl yapacağını öğrenebilirsin.

İlginizi Çekebilecek Diğer Yazılar

Python'da Yazıyı Sese, Sesi Yazıya Nasıl Dönüştürürüz?

    Merhaba arkadaşlar, bugün yazıları kendi yazdığımız programla nasıl sese dönüştürürüz ve bu işlemin ...

Python'da Mail Nasıl Atılır?

    Merhaba arkadaşlar bugün “Python ile mail nasıl atılır?” sorusunu cevaplayacağız. smtplib modülü sıradan ...

Python'la Kendi Arama Motorunuzu Yapabilirsiniz

    Merhaba arkadaşlar, bugün kendi arama motorumuzu yazacağız. Bu sayede arama motorlarının çalışma mantığını ...

Python'da Sınıf Kullanımı

    Merhaba arkadaşlar, bugün ki konumuz sınıflar. Sınıflar değişkenlere özellik eklemek için kullanılır. Daha iyi ...

Python'da Fonksiyonlar ve Hata Yakalama

Merhaba arkadaşlar, bügün ki konumuz fonksiyonlar ve hata yakalama.     Belli bir kod bloğunu ...

Python'da Döngüler

    Merhaba arkadaşlar,     Programlamada en çok kullandığımız yapılardan birisi de döngülerdir. Döngüler, ...

Python'da Liste Kullanımı ve Metotları

Merhaba arkadaşlar, Bugün ki konumuz listeler. Listeler son derece kullanışlı bir veri tipidir ve çoğu ...

Python'da İf-Elif-Else Yapısı

Merhaba arkadaşlar, geçen derste karakter dizisi metotlarından birkaçını görmüştük. Bu ders ise if-elif-else yapısını görerek ...

Python'da Karakter Dizisi Metotları

Merhaba arkadaşlar, Bugün işleyeceğimiz konu karakter dizileri ve karakter dizisi metotları. Karakter dizilerini ve metotlarını ...

Python, Bir Başka Dünya

Öncelikle merhaba, Ben Metehan. Programlama ile yaklaşık iki senedir ilgileniyorum ancak Python ile tanışmam 1.5 ...