• Sonuç bulunamadı

F.Ü. Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bilgisayar Sistemleri Laboratuvarı DENEY NO: 6 JAVA İLE DAĞITIK PROGRAMLAMA.

N/A
N/A
Protected

Academic year: 2022

Share "F.Ü. Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bilgisayar Sistemleri Laboratuvarı DENEY NO: 6 JAVA İLE DAĞITIK PROGRAMLAMA."

Copied!
7
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

F.Ü. Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bilgisayar Sistemleri Laboratuvarı

DENEY NO: 6

JAVA İLE DAĞITIK PROGRAMLAMA Deneyin Amacı:

Bu deneyde nesne tabanlı bir programlama dili olan JAVA’nın genel yapısı, ağ ortamında dağıtık programlama (client/server yapısı) ve bu amaç doğrultusunda Java’nın nasıl kullanıldığını görmek amaçlanmıştır. Bunun için deneyde önce dağıtıklık kavramı anlatılmış daha sonra uygulamalara geçilmiştir.

1. Dağıtık Sistem Nedir

Katmanların birbirinden uzak yerlerde bulunduğu sistemlere dağıtık sistemler (distributed systems) adı verilir. Dağıtık sistemler, farklı bilgisayarlara ait donanım ve yazılım bileşenleri arasında yalnızca mesajlaşma yöntemleri kullanılarak haberleşme ve koordinasyonunun sağlanabildiği, ortak bir amaca hizmet eden network sistemleridir. Başka bir deyişle, fiziksel olarak bağımsız bilgisayarların kullanıcıya tek bir bilgisayar gibi görünerek, iş yükünün paylaşıldığı sistemlerdir. Dağıtık sistemler için donanım önemli bir yer tutar. Fakat bir dağıtık sistemin asıl görünümünü büyük ölçüde belirleyen yazılımıdır.

Dağıtık sistemler, geleneksel işletim sistemlerine çok benzerler. Bunun nedenlerinden birincisi;

donanım parçaları için kaynak yöneticisi olarak görev yapmalarıdır. Kaynakları; CPU, hafıza, çevresel cihazlar, network ve çeşitli veriler arasında paylaşarak, çoklu kullanıcı ve uygulamalara izin verirler. İkincisi ve daha önemlisi ise; uygulamaların kolayca yürütülebileceği bir yerde sanal bir makine sağlayarak, donanımın altındaki karmaşıklıkları saklarlar.

(2)

Dağıtık sistemlerdeki en önemli nokta süreçler arası haberleşmedir. Süreçler arasında mesaj iletimi önemli ve zor bir konudur. Sistem içindeki bilgisayarlar arası mesafe, networkun durumu (hatların yoğun olması) ve diğer fiziksel şartlar mesaj iletimini etkileyebilmektedir. Bu nedenle mesaj iletimini düzenlemek amacıyla çeşitli orta katman yazılımları ve mesaj gönderme protokolleri oluşturulmuştur. RPC (Remote Procedure Call) ve RMI (Remote Object Invocation) bu orta katman yazılımlardan önemli iki tanesidir. TCP ve UDP de en çok kullanılan mesaj transfer protokolleridir. Bilgisayarı bu protokoller yardımıyla birbiriyle haberleştirmek için öncelikle aynı ağa bağlı olmaları gerekmektedir.

2. Niçin Dağıtık Programlama?

Kaynak Paylaşımı: Eğer farklı kapasitelerdeki farklı siteler, diğer bir siteye bağlı ise, bir sitedeki bir kullanıcının, diğer sitede mevcut kaynakları kullanması mümkün olabilir. Örneğin;

A sitesindeki bir kullanıcı, B sitesinde bulunan bir lazer yazıcıyı kullanıyor olabilir. Bu sırada, B’deki kullanıcı da A’da bulunan bir dosyaya erişebilir.

Hesaplamayı Hızlandırma: Belli bir hesaplama, eş zamanlı olarak çalışabilen alt hesaplamalar şekilde bölümlenebilirse, dağıtık bir sistem farklı siteler arasında alt hesaplamaları dağıtmaya izin verir, alt hesaplamalar eş zamanlı olarak çalıştırılabilir ve böylece hesaplamalarda hızlanma sağlanır. Ek olarak, eğer belli bir site işlerle aşırı yüklenmişse, işlerin bir kısmı hafif yüklü diğer sitelere taşınabilir. Buna da yük paylaşımı denir.

Güvenilirlik: Dağıtık bir sistemde bir site başarısız olursa, kalan siteler çalışmaya ve daha güvenilir sistemler vermeye devam ederler. Eğer bir sistem, birden çok, büyük ve özerk sistemlerden oluşuyorsa (yani genel amaçlı bilgisayarlarsa), onların birinin başarısızlığı geri kalanını etkilemez. Fakat eğer, sistem küçük makinelerden oluşuyorsa, onların her biri de bazı önemli sistem fonksiyonlarından sorumlu ise (örneğin; dosya sisteminin ya da giriş/çıkışın terminal özelliği), tek bir hata böyle sistemlerin çalışmasını durdurabilir. Genel olarak, sitelerin bazılarında başarısızlıklar olsa bile, (hem donanım hem de verinin) yeteri kadar yedeklenmesiyle sistem çalışmasına devam edebilir.

(3)

3. İstemci/Sunucu Nedir?

İstemci/Sunucu sistemleri, istemci ve sunucu olmak üzere iki parçadan oluşur. İstemci bazı hizmetler için istekte bulunurken, sunucu da bu hizmetleri üreterek yanıt verir. İstemci ve sunucu genellikle ayrı konumda yer alırlar. Çoğu istemci/sunucu sistemleri dağıtıktırlar. Bu bir bakıma; istemci parçanın bir bilgisayarda, sunucu parçasının başka bir bilgisayarda çalışması demektir. Buna karşın bazı istemci/sunucu sistemleri dağıtık değillerdir. Bu sistemlerde, istemci ve sunucunun aynı bilgisayarda çalıştığı ayrık süreçler (processes) dir.

4. Deney Senaryosu

ABC sitesinin kullanıcılarına ait bilgiler veritabanında tutulmaktadır. ABC sitesi kayıt olurken istediği kullanıcı adını olduğu gibi; şifreyi ise tek yönlü karıştırma yöntemi olan md5 fonksiyonundan geçirerek kaydediyor. Kullanıcı giriş yapmaya çalıştığı zaman girişte kullanılan kullanıcı adı olduğu gibi, şifre ise md5 fonksiyonundan geçirildikten sonra veritabanında bu değerlere karşılık bir kayıtın olup olmadığı kontrol ediliyor ve giriş işlemi bu şekilde yapılıyor. Şifre veritabanında karıştırılarak tutulduğundan, veritabanında kayıtlı şifre bilgisi başkaları tarafından ele geçirilse dahi şifrenin öğrenilmesinin önüne geçilmiş oluyor.

ABC sitesindeki veritabanı bilgilerinin bir şekilde elimize ulaştığını varsayarak; Md5 ile karıştırılmış şifresini bildiğimiz X kullanıcısına ait şifreyi bulmamız gerekmektedir. Ancak md5 tek yönlü bir algoritma olduğu için karıştırılmış veriden orjinal şifreyi elde etmemiz mümkün değildir. Bunun için sitede istenen şifrenin 8 basamaklı bir sayı olduğu bilgisinden de yola çıkarak tek tek tüm olasılıkları md5 fonksiyonundan geçirerek sonucu elimizdeki md5li veri ile karşılaştırmamız gerekmektedir (kaba kuvvet algoritması). Ancak bunu bir bilgisayardan yapmaya çalıştığımızda T süre kadar zaman almaktadır. Bu süreyi kısaltmak için belirli aralıktaki şifreleri farklı bilgisayarlara denettirerek (dağıtık programlama) sonuca ulaşmak planlanmaktadır. Deneyimizde bir adet iş dağıtan bilgisayar ve iş yapan en az iki bilgisayar olacaktır.

(4)

5. MD5 (Message Digest 5) Algoritması Nedir?

Tek yönlü bir özütleme (hashing) algoritmasıdır. Girilen veri ister bir karakterden oluşsun isterse terabaytlar büyüklüğünde bir dosya olsun çıkışta 128 bit (her biri 16’lık tabanda olan 32 rakam uzunluğunda) bir çıktı üretir. Sonsuz giriş kümesine karşılık 16^32 kadar çıktı olacağından aynı sonucu verecek birden fazla girdi bulunacaktır. Ancak şifre gibi küçük veriler için böyle bir çakışma söz konusu değildir. Bundan dolayı şifreler genellikle veritabanlarında bu şekliyle tutulur. Girilen şifreler bu fonksiyondan geçirildikten sonra karşılaştırma yapılır.

1 c4ca4238a0b923820dcc509a6f75849b

fırat üniversitesi 44d4177ff9be0f3e45f27847719d1107

Fırat Üniversitesi a9ccc25be1bd49a199a69814d33e7b0d

6. JAVA’da socket işlemleri

İki cihazın birbiriyle haberleşmeleri için öncelikle ortak bir kurala ihtiyaçları vardır. Biz deneyimizi gerçekleştirirken sunucu bilgisayarlara gönderilmesi gereken parametreler arasına “-” işareti koyarak göndereceğiz. “A-B-C” gibi bir mesaj geldiğinde biz bunu sunucu bilgisayarda ayrıştırarak birinci parametre olarak A’yı ikinci parametre olarak B’yi.. alacağız. Bu bizim haberleşme kuralımız olacak.

Ağ üzerinde birbirine bağlı bilgisayarlar arasında haberleşme portlar üzerinden yapılmaktadır.

Bilgisayarlarda 16 bitle ifade edilebilecek sayıda (216 = 65536 adet) port bulunmaktadır. Bu portlardan ilk 1024 ü özel amaçla ayrılmış portlardır. Bilgisayar sistemlerinde indisler 0’dan başladığı için 1024. port bizim kullanabileceğimiz portların birincisi, 65535. port ise sonuncusu olmaktadır.

ServerSocket soket = new ServerSocket(PORT_NUMARASI);

Kodu ile belirtilen PORT_NUMARASI‘nı yöneten yeni bir socket nesnesi ouşturulur.

Socket baglanti = soket.accept();

Kodu ile belirtilen PORT_NUMARASI’nı dinleyerek yeni bağlantı bekler.

(5)

Diğer tarafta client uygulamalarından server tarafından açılan porta bağlanmak için : Socket baglanti = new Socket(IP_ADRESI , PORT_NUMARASI);

Kodundan yararlanılır. Kendi bilgisayarında açılan porta erişmek için IP_ADRESİ kısmına

"localhost" yazılabilir.

Server ile Client arasındaki bağlantı kurulduktan sonra her iki taraf da sahip oldukları soket nesneleri (baglanti) yardımıyla birbiriyle veri alışverişi yapabilirler.

Veri Gönderimi :

PrintWriter output = new PrintWriter(

baglanti.getOutputStream(),true );

output.println("Gönderilecek Mesaj");

Veri Alımı :

BufferedReader in = new BufferedReader(

new InputStreamReader(baglanti.getInputStream) );

in.readLine();

in.readLine satır gelmesi için bekler, bir sonraki adıma geçmez. Bunun için in.readLine komutunda beklemesini istemiyorsak bundan önce in.ready() fonksiyonuyla okunacak bir şey olup olmadığı kontrol edilir, varsa okuma komutu çağrılır. Sürekli veri okunması yapılacak ise bu işlem döngüye sokulur.

7. JAVA’da thread işlemleri

in.readLine komutu bir sonraki adıma geçmeyip bekleyeceğinden dolayı birden fazla bilgisayara aynı anda bağlanmak için thread kullanılabilir. Thread yardımıyla birbirinden bağımsız iş parçacıkları kendilerine ait soketleri dinler ve bir veri geldiğinde bunu algılayabilir.

Javada thread oluşturmak için sınıfı Thread sınıfından türetmek ve ardından run fonksiyonunu implement etmek gerekir.

(6)

Örnek thread oluşturma :

public class Ornek extends Thread { public void run() {

int i=0;

while(true){

System.out.print(i++ + " ");

} }

public static void main(String args[]) { (new Ornek()).start();

(new Ornek()).start();

} }

Thrad sınıfından türetilen bir nesnenin start metodu çağrıldığında, run içerisine yazdığımız kodları tetiklenir. Yukardaki kod ile Ornek adında bir thread oluşturduk ve main fonksiyonu içerisinden bu threadi tetikleyerek çalıştırdık. Hemen ardından aynı threadi bir kez daha çalıştırdık. Sonuçta oluşturduğumuz sonsuz döngü sistemin tüm kaynaklarını tüketmemiş oldu ve iki sonsuz döngü aynı anda çalıştırılmış oldu. Thread iki kez çağrıldığından dolayı yukardaki kodun aynı sayıdan ikişer kez yazdırması beklenmektedir.

8. Deneyin Gerçekleştirilmesi ve Sonlandırılması

 Bir bilgisayarda dağıtılması planlanan iş (kaba kuvvet ile şifreyi bulma) test edilir.

(Md5 kodu hazır kullanılacaktır. Fikir sahibi olmanız yeterli)

 Bilgisayarlar ağ bağlantısı üzerinden birbirine bağlanır.

 Bir bilgisayar başka bilgisayarların bağlanması için Java Socket sınıfında yararlanarak port açar ve diğer bilgisayar buna bağlanır. İki bilgisayar arasında mesajlama işlemi test edilir.

 Diğer bilgisayarlarda istemciden gelen mesaj yorumlatılır ve mesajda gelen parametreler ile iş yapan fonksiyon çağrılır.

 Bir bilgisayar açtığı portu dinlerken tüm kaynakları onun için harcar ve başka bir işlem yapamaz. Birden fazla bilgisayarın bağlanabilmesi için port dinleme işlemi thread kullanacak şekilde uyarlanır.

(7)

 Deney sonlandırılmasında benzer bir şekilde başka bir problemin çözümünü yapmanız sizden istenecektir. Deney sonlandırmasında yazdığınız koda hakim olup, sorulan soruları cevaplamanız beklenmektedir.

Referanslar

Benzer Belgeler

Bilgisayar Destekli Eğitim (BDE), öğretimsel içerik veya faaliyetlerin bilgisayar yoluyla aktarılmasıdır..

Windows işletim sistemi sağdan sola yazım şeklini desteklemediği için örnek bir uygulama olarak not defterinde yazılan metni kaydederken Encoding seçeneğini Unicode Big

Devrenin girişine genliği 5V, frekansı 1kHz olan sinüzoidal ve kare dalga bir işaret uygulayıp çıkış işaretini çiziniz.. Sonra giriş işaretinin genliğini 5V’dan

HEMŞİREL İK AL ANIND AKİ ARAŞTIRMA MAKAL EL ERİNİN BİL İMETRİK ANAL İZ İ: TÜRKİYE ÖRNEĞİ HEMŞİREL İK AL ANIND AKİ ARAŞTIRMA MAKAL EL ERİNİN BİL İMETRİK ANAL İZ

Aynı şekilde gezegenle birlikte hangi uydu girildiyse uydunun ivme değerini, ivmeyiDosyayaYaz isimli metodu override ederken uydu ismi ve ivmesi

Yüksek seviye dillerde program yapmak kolay olmasına rağmen, aracı olduğu için hızları yavaĢtır ve çok kaynak tüketirler.. Programlama ile ilgilenen

Bu makale, Bezier ve B-spline eğrileri gibi CAGD (Computer Aided Geometric Design)’da görünen en önemli eğrilerle başa çıkmak için MATLAB tabanlı yeni bir kullanıcı

• Sayısal olarak simetrik bir güzelliğe sahip 2020 yılında eğitim – öğretim faaliyetleri ile akademik çalışmalarına başlayacak olan bölümümüz genç, idealist ve