Server-Client Uygulamaları

Browse By

Ağ programlama, uygulamaların ağ ortamı üzerinden iletişimde bulunarak veri alış-verişi yapılmasına olanak verir; bu nedenle ağ programlama uygulamalarda önemli bir yer tutar. Bu konu kapsamında da temel ağ uygulamalarından olan;

– Echo istemci ve sunucusu,

– Chat istemci ve sunucusu,

– Web sunucusu son olarak ise

– Whatsapp benzeri metinsel bilgi iletişimi sağlayan bir uygulamanın

Python dili ile gerçekleştirilmesi istenmiştir. Hazırlanılan uygulamaların anlaşılmasını kolaylaştırmak için öncelikle temel bazı kavramların tanımları bilinmelidir.

Yerel Bölge Ağı (LAN);

Yerel bölge ağları, bilgisayarları ve diğer bilgi işlem araçlarını kısıtlı bir fiziksel çevre dahilinde birbirine bağlar. Bu alanlara örnek olarak bir ofis, bir bina, bir işletme tesisi gösterilebilir.

IP Adres (Internet Protocol Address);

Temel olarak IP Adresi, internet ağı (Wide Area Network, WAN), Yerel Ağ (Local Area Network, LAN), Kablosuz Yerel Ağ (Wireless Local Arean Network, WLAN) vb. ağlar üzerindeki cihazlara verilen adres, isim, numaradır. Ağ üzerinde veri alıp vermek isteyen her cihazın mutlaka bir IP adresine sahip olması gerekir. İnternette iki cihaz aynı IP adresine sahip olamaz.

IPv4;

Halen kullanılmakta olan standart İnternet protokolüdür ve 32 bitten, başka bir ifadeyle sekiz bitlik 4 rakamdan oluşur. Bu rakamlar, 0 ila 255 arasında değişir. IPv4 protokolündeki bir adres 1.0.0.0 ila 255.255.255.255 arasında herhangi bir numara olabilir. 4,294,967,296 adet IP Adres olabilir. Ama IP adreslerinin sınıflara ayrılmış olması, bazı adreslerin çoklu gönderim (Multicasting) için, bazılarının da test amaçlı kullanılmasından dolayı bu sayı 3,2 milyara kadara düşmektedir.

Port;

Her IP Adresi portlara yani sanal veri yollarına bölünmüştür. Bu sayede aynı anda, aynı IP Adresinden (bilgisayar vb.) farklı programlarla veri alışverişi yapılabilmektedir. Örneğin aynı anda, aynı bilgisayardan 110 nolu portu kullanarak Outlook Expressle e-maillerimizi indirirken, 80 nolu portu kullanarak Internet Tarayıcısı ile web sitelerine bakabiliyoruz. Port noları 0-65535 arasında değerler alabiliyor.

Sunucu (Server);

Bilgisayar ağlarında, istemcilerin (kullanıcıların) erişebileceği, kullanımına ve paylaşımına açık kaynakları veya bazı servisleri (FTP, E-Posta, Web Sitesi) çalıştıran bilgisayar birimlerine verilen genel bir addır. Sunucu bilgisayar sunduğu servise göre de Web sitesi yayınlıyorsa Web Sunucusu, Eğer posta servislerini yayınlıyorsa E-Posta Sunucusu veya Veritabanı sunucusu olarak isimlendirilirler. Sunucu aynı anda yüzlerce farklı kullanıcıdan gelen isteklere yanıt vereceği için performans olarak masa üstü bilgisayarlarımızdan daha hızlı ve daha geniş depolama alanları içerir.

İstemci (Client);

Bir ağ üzerinde, sunucu bilgisayarlardan hizmet alan kullanıcı bilgisayarlarıdır. Bilgiye erişim yetkileri sunucu tarafından belirlenir. Eğer bir bilgisayardan Internete bağlanılarak web siteleri ziyaret ediliyorsa o bilgisayar İstemci(Client) bilgisayardır. Yani İstemci bilgisayarlar Sunucu bilgisayarlara bağlanarak onlardan bilgi alırlar.

Soket;

Soketler, süreçler arası iletişim için kullanılır. Interprocess iletişimi istemci-sunucu modeline dayanır. Bu durumda, istemci-sunucu birbiriyle etkileşime giren uygulamalardır. İstemci ve sunucu arasındaki etkileşim için bir bağlantı gereklidir. Soket programlaması, etkileşime girecek uygulamalar arasındaki bağlantıyı kurmaktan sorumludur. Kısacası ağ iletişimini temin eden bir uyarlamadır.

Echo İstemci ve Sunucu Uygulaması

Echo istemci ve sunucu uygulamasında gerçekleştirilen sunucunun istemci bağlantısını kabul ettikten sonra istemciden gelen tüm mesajları aynı şekilde istemciye geri göndermesi gerekmektedir. Bunun için öncelikle sunucu ve istemci yazılımları yapılmıştır. Sunucu yazılımı aşağıdaki şekildedir ;

Burada “socket” kütüphanesi kullanılmış ve işlemlerin çoğu bu kütüphanenin hazır fonksiyonları ile sağlanmıştır. Bağlantının sağlanabilmesi için bir soket oluşturulmuş ve port numarası belirlenmiştir. “listen()” fonksiyonu ile gelen bağlantılar dinlenir ve “accept()” fonksiyonu ile kabul edilir. Bu uygulama şuan için sadece yerel ağ üzerinde çalışmaktadır. Sunucunun sürekli çalışması için sonsuz döngü kullanılmıştır. İstemci bağlantısı sağlandıktan sonra gelen mesajlar data nesnesi içerisinde tutulur ve “sendall()” fonksiyonu ile istemciye geri gönderilmiştir. Uygulamanın istemci tarafı yazılımı aşağıdaki şekildedir;

İstemci kısmında da socket kütüphanesi kullanılmıştır ve oluşturulan port numarası sabit olarak buraya da eklenmiştir. “connect()” fonksiyonu ile sunucuyla bağlantı sağlanır. Bağlantının açık kalması için döngü oluşturulur ve sunucudan gelen mesajlar “input()” fonksiyonu ile alınıp sonrasında ekrana yazdırılmıştır. Uygulama çalıştırılırken önce sunucu uygulaması çalıştırılmalı sonrasında istemci uygulaması çalıştırılmalıdır. Çalışması aşağıdaki şekildedir ;

 

Yukarıda da görüldüğü gibi sunucu istemciyi ip adresi ile tanır ve işlevsel olarak gelen mesajları geri göndermektedir.

Chat İstemci ve Sunucu Uygulaması

Chat istemci ve sunucu uygulamasında sunucunun birden fazla istemciye hizmet vermesi gerekmektedir. Bağlı olan iki veya daha çok istemci arasında mesaj iletimi işlemini gerçekleştirir. Bu uygulama da sunucu ve istemci tarafı olmak üzere iki parçadan oluşur. Sunucu tarafı aşağıdaki şekildedir;

Uygulamada serverın birden çok istemciye hizmet verirken daha hızlı çalışmasını sağlayabilmek için Thread yapısı kullanılmıştır. Gelen bağlantıları yakalamak ve mesaj iletimini sağlamak için fonksiyonlar yazıldı ve son kısımda yukarıdaki uygulamada da olduğu gibi port numarası belirlenip soket nesnesi oluşturulmuştur. Birden çok istemci bulunacağı için gerekli adres ve isim bilgileri listeler ile saklanır. İstemci kod kısmı ise aşağıdaki şekildedir;

Bu kısımda farklı olarak ”tkinter” kütüphanesi yardımı ile görsel bir sohbet penceresi oluşturulmuştur.  Uygulamanın çalışması aşağıdaki şekildedir;

Uygulama sunucuya bağlanmak için istemciden adres ve port bilgilerini ister.

 

Web Sunucu Uygulaması

Bu uygulamada metin tabanlı bir web sayfasının yayınını gerçekleştiren bir web sunucusu yapılmıştır. Bunun için “http.server” kütüphanesi kullanılarak bir html sayfası sunucusu gerçekleştirilmiştir.

Diğer uygulamalarda da olduğu gibi bu server için de bağlantı yolunu belirlemek amacıyla bir port numarası atanmıştır. “Do_Get()” fonksiyonu ile gelen istekler yakalanır. Kütüphanenin hazır fonksiyonları ile sayfa yayını sağlanır ve içeriği “write()” fonksiyonu ile sağlanmıştır. Bu uygulamada istemci bağlantı kurmak isteyen cihazda kullanılan tarayıcı uygulamasıdır. Tarayıcı üzerinden sunucu cihazın ip adresi  ve port numarası ile bağlantı sağlanır.

Sunucu terminalinde bağlanan cihazların ip adresleri ve 200 başarılı mesajı görülmektedir.

Mesajlaşma Uygulaması

Bu uygulama yapı olarak chat uygulaması ile benzerlik göstermektedir. Sucunun bağlı olan istemciler arasında mesaj iletimini sağlaması gerekmektedir. Farklı olarak bir web uygulaması şeklinde tasarlanmıştır. Sunucu uygulaması bulunmakta, istemciler tarayıcıları üzerinden sunucu adresi ve port numarası ile bağlantı sağlamaktadır. Uygulamanın tasarım kısmı bir html sayfası yardımıyla sağlanmıştır. Sunucu oluşturulan bu sayfayı kullanmaktadır. Tasarım kısmı aşağıdaki şekildedir;

Tasarım oluşturulurken Boostrap teması ve JQuery fonksiyonları kullanılmıştır. Server kısmı ise şu şekildedir;

Web tabanlı bir uygulama oluşturabilmek için flask ve socketIO frameworkleri kullanılmıştır. Uygulamanın çalışması aşağıdaki şekildedir;

Uygulama çalıştığı sırada sunucu terminalinde kurulan bağlantılar görülmektedir.

Konu kapsamında yapılan uygulamalar bu şekildedir. Uygulamaların hepsi var olan örnek uygulamalar üzerinden gerçekleştirilmiştir.

Kaynakça:

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir