Ağ programlama (Network programming

)

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

1

Giriş

• 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. • Ağ üzerinde uygulama geliştiren tasarımcı, ağ sisteminin yapısını bilmesi gerekir; bu yüzden, Java programlama diliyle ağ programlama nasıl yapılır sorusu sorulmadan önce ağ sistemine bir bakmak yararlı olacaktır.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

2

Kullanıcı/Sunucu (Client/Server) Nedir? - I

Kullanıcı, adından da anlaşılacağı gibi bir yerlerden veri almak isteyen uygulamalara/sistemlere verilen isimdir. Örneğin, ağ tarayıcısı en çok bilinen kullanıcı uygulamasıdır. Kullanıcı uygulamalarının karşı tarafında bulunan ve aynı bir garson gibi hizmet veren uygulamalara sunucu denir. Sunucu uygulamasına örnek olarak, yılların efsanevi ağ sunucu uygulaması olan Apache verilebilir (http://www.apache.org).
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 3

Kullanıcı/Sunucu (Client/Server) Nedir? - II

• Ağ sunucusu (Web server) • FTP (File Transfer Protocol) sunucusu • Telnet sunucusu

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

4

IP Adresi ve Port Kavramları - I

• İnternet’e bağlı her sistemin kendisine ait özel bir numarası vardır -ki bu numaraya IP adresi denilmektedir. • Örneğin http://www.kodcu.com sitesini barındıran sunucu sistemin IP adresi 212.115.21.14’tür. • İnsan belleği sayısal IP adresleri anımsamakta zorluk çeker; dolayısıyla, ayrıca alan adı sistemi mevcuttur (Domain Name System). Alan adlarına örnek olarak www.kodcu.com veya www.riskturk.com isimleri verilebilir. • Bir IP adresine birden çok alan adı bağlanabilmektedir.
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 5

IP Adresi ve Port Kavramları - II

• Birçok sunucu uygulamalarının aynı sistem üzerinde çalışmaları, onların aynı IP adresinden hizmet verdiklerini gösterir; ancak, bu sunucu uygulamalarının birbirinden farkı herbirinin farklı port numaralarından hizmet vermeleridir...
= 80 = 23 = 21

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

6

Ağ sunucusu 8080. port numarasından hizmet verebilir mi ?

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

7

Soket Nedir?

• Soket, IP adresi ve port numarasının birleşiminden oluşan ve uygulama yazılırken ağ içerisindeki altdüzeydeki ayrıntılardan kurtulup, iki sistemin birbirine kolayca bağlanmasını sağlayan bir tanımlama/kavramdır.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

8

Sihirli Numara 127.0.0.1 (Local Loopback)

• Ağ üzerinde çalışan uygulama geliştirilebilmesi için geliştirme aşamasında belirli bir IP adresine sahip sistem üzerinde çalıştırılması gerekir. • Peki ağ üzerinde çalışacak bir uygulama yazılması için her seferinde İnternet’e/ağa bağlı olunması mı gerekiyor? IPTest.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

9

IPv4 ve IPv6 Uyarlamaları - I

• Şimdilerde ortada IP adres yetmezliği gündeme gelmiştir. • Eski sistem yani aslında şu an için kullandığımız IP adres sistemine IPv4 denilmektedir. • Bu sistemde IP adresleri ondalık 32-bit işaretsiz sayılardan oluşmaktadır, IPv4 sisteminin iskeleti aaa.bbb.ccc.ddd şeklinde oluşmaktadır. • Biraz önce incelenen örnekte bahsi geçen IP adresi IPv4 sistemindeydi, 195.155.246.159 gibi...
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 10

IPv4 ve IPv6 Uyarlamaları - II

• IPv6 sistemi yönlendirme (routing), otomatik adres konfigürasyonu, doğrulama (authentication), gizlilik (privacy) ve taşınır IP (IP mobility) gibi bir çok yeniliği de beraberinde getirmektedir. • IPv6 sistemi ise onaltılık (hexadecimal) 128bit işaretsiz sayılardan oluşmaktadır.
Ör:
3ffe:1700:4242:7:500:f8cf:fe21:67cf
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 11

Adres Gösterimi

• Java Programlama dilinde IP adresini ifade etmek için InetAddress sınıfı kullanılır. • Bu sınıf J2SE 1.4’te (Java 2 Standart Edition) bir çok değişikliğe uğramıştır. • İşin aslı, Java programlama dilini kullanarak uygulama yazan bir kişi için IP adresinin IPv4 veya IPv6 sistemine göre olmasının fazla bir önemi yoktur çünkü InetAddress sınıfı arka planda tüm işleri bizim yerimize halleder.
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 12

IPv4 veya IPv6 sistemleri - I
InetAddress ipAdresi =InetAddress.getByName("www.obje7.com"); Socket s = new Socket(ipAdresi, 80 );

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

13

IPv4 veya IPv6 sistemleri - II

• Bu ifademiz ise bir sunucu uygulamaya aittir. Bu uygulamamız 8080. port numarasından devamlı olarak dinleme yapıp gelen istekleri karşılamak için tasarlanmıştır.
ServerSocket sunucu = new ServerSocket(8080); for(;;) { Socket istemci = sunucu.accept; // kimin baglandigini ogrenelim ...... InetAddress istemcininAdresi = istemci.getInetAddress; }

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

14

Sunucu/İstemci Uygulamalar - I

• Java programlama dilini kullanarak yapacağımız ilk ağ uygulamalar, basit bir sunucu ve istemci üzerine olacaktır.
SunucuOrnekBir.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

15

Sıra

Uygulamanın adı

Dinlediği port numarası

Çalışması

Açıklama

Original Hata (Eğer oluşmuş ise)

1.

SunucuOrnekBir.java

8080

java SunucuOrnekBir

Sorun yok, 8080. port numarasından dinlemeye başlar. Exception in thread "main" java.net.Bin dException: Address already in use: JVM_Bind
Exception in thread "main" java.net.BindEx ception: Address already in use: JVM_Bind 16

2.

SunucuOrnekBir.java

8080

java SunucuOrnekBir

Sorun var, çünkü 8080. port numarası dolu.

3.

Tomcat Servlet/JSP container
© Altuğ B. Altıntaş 2003

8080

startup.sh (Linux/Unix için), startup.bat (windows için)

Sorun var, çünkü 8080. port numarası dolu.

Java ve Yazılım Tasarımı - Bölüm 13

Sunucu/İstemci Uygulamalar – II

• Java programla dilini kullanarak basit bir istemci uygulaması yazmak için sadece java.net paketinin altındaki Socket sınıfını kullanmak yeterli olacaktır.

IstemciOrnekBir.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

17

Detaylar

baglanti kabul edildi: Socket[addr=/127.0.0.1,port=1267,localport=8080] soket = Socket[addr=localhost/127.0.0.1,port=8080,localport=1267]

Aşağıdaki dörtlünün bir tekillik (uniqie) oluşturması gerekir. • İstemcinin IP adresi • İstemcinin port numarası • Sunucunun IP adresi • Sunucunun port numarası

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

18

SunucuOrnekBir.java ve IstemciOrnekBir.java uygulamaları arasındaki ilişki

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

19

Bloke Bağlantılar - I

• Bloke bağlantılar, G/Ç (Girdi/Çıktı-I/O-Input/Output) işlemi gerçekleştiği anda uygulamayı havada asılı bırakan bağlantılardır; bir başka deyişle uygulamayı bekleten bağlantılardır. • SunucuOrnekBir.java ve IstemciOrnekBir.java arasındaki ilişkinin yönlendiricisi istemci uygulamaydı çünkü istemci uygulama verileri 300ms yerine 1 saatte gönderirse sunucu uygulama böyle bir hareketin karşında boyun eğmek zorundadır.

SunucuOrnekIki.java
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 20

Bloke Bağlantılar - II

• SunucuOrnekIki.java uygulamamızın eksikliği ise kendisine gelen tüm istemcilere teker teker hizmet vermesidir. • Örneğin iki istemci uygulama bu sunucuya bağlanmak isterlerse, bu istemci uygulamalardan önce biri, daha sonra ise öteki kabul edilecektir. • Şimdi IstemciOrnekBir.java içerisindeki Thread.sleep yordamına 300 yerine 10000 yazıp bu istemci uygulamamızı baştan derleyip çalıştırırsak, istemci uygulamalarımız verileri 10000ms bekleterek sunucuya gönderecektir.
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 21

İş Parçacıkları (threads) İş Başında

• Sunucu uygulamalarının aynı anda birçok isteğe cevap verebilmesi için işin içerisine iş parçacıklarının da dahil edilmesi gerekir.
SunucuOrnekUc.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

22

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

23

Havuz • Her istemci isteği için ayrı bir iş parçacığının oluşturulması çok lükse kaçar.

IstemciOrnekIki.java
© Altuğ B. Altıntaş 2003

SunucuOrnekDort.java
24

Java ve Yazılım Tasarımı - Bölüm 13

URL ve URLConnection Sınıfları

• URL sınıfının yaptığı başlıca görevlerden biri aynı tarayıcı(browse) gibi çalışmasıdır.
1. mini kurs notlarını bu adresten okuyabilirsiniz : http://www.firmaninadresi/minikurs/ders1250.html

2. mini kurs notlarını bu adresten okuyabilirsiniz : http://www.firmaninadresi/minikurs/ders559.html

SayfaBulucu.java
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 25

Veritabanı sunucularına bağlantı

• Veritabanı sunucularına hangi organizasyonların ihtiyacı olabilir ?
• Bankalar • Hastaneler • Üniversiteler • Devlet Daireleri • Bankalar, müşteri bilgileri • Hastaneler, hasta kayıtlarını • Üniversiteler, öğrenci bilgilerini • Devlet Daireleri, planlama bilgileri, vatandaş bilgileri..gibi
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 26

SQL

• SQL (Standart Query Language- Standart Sorgulama Dili), veritabanlarını oluşturmak, kontrol etmek ve yönetmek için kullanılan ve 1992 yılında standart hale getirilmiş olan bir dildir.
• Veritabanı, kalıcı verileri tablo şeklinde saklayan sistem • Tablo, satırlardan oluşan yapı • Satır, kolonlardan oluşan yapı • Kolon, isim, tip ve değere sahip olan tek bir veri yapısı.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

27

JDBC (Java DataBase Connectivity-Java Veritabanı Bağlanılabilirliği)

• Her veritabanı sunucusunun belli bir üreticisi vardır. • Şu an için kullanılan en yaygın veritabanı sunucularından bir kaçı aşağıdaki gibidir. 1. MySQL : 3306 port numarasından hizmet verir.

2. Oracle : 1521 port numarasından hizmet verir. 3. MSSQL : 1433 port numarasından hizmet verir.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

28

Genel Bakış

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

29

MySQL için gerekli olanlar...

• MySQL açık kaynaklı bir projedir. Bu veritabanı sunucusu GPL (GNU General Public License) lisansı altında bedava kullanılabileceği gibi, belirli bir ücret karşılığında ticari lisans altında da kullanılabilir. • Sadece MySQL değil tüm veritabanı sunucularına ait sürücüleri (driver) bulabilmek için http://www.java.sun.com/products/jdbc/ adresi ziyaret edilebilir.

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

30

CLASSPATH ayarları

• Java uygulamalarının MySQL veritabanına sunucusuna bağlanabilmesi için sistemimizde iki şeyin olması gerekir. – MySQL veritabanı – MySQL sürücüsü
Linux

$ setenv CLASSPATH /kurulum/dizini/mm.mysql.jdbc-[versiyon]:$CLASSPATH
Windows

C:\> set CLASSPATH=\kurulum\dizini\mm.mysql.jdbc-[versiyon];%CLASSPATH%

VeritabaniBaglantiTestBir.java
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 31

Sürücünün(Driver) yapısı

• > jar -xvf mm.mysql-2.0.10-bin.jar

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

32

Bağlantı

VeritabaniBaglantiTestIki.java
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 13 33

MUSTERI tablosuna yeni bir kayıtın eklenmesi

• executeUpdate() ve executeQuery() yordamlarının arasındaki farklar nelerdir ? VeritabaniBaglantiTestUc.java
#> java VeritabaniBaglantiTestUc ONUR AY "BUYU K SITE B BLOK KAT 5 NO 18" "0 262 11112222" "6606645" "ONUR@ONUR.COM" "IZMIT" " KURUCESME"

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

34

MUSTERI tablosundaki mevcut kayıtların değiştirilmesi ve silinmesi

VeritabaniBaglantiTestDort.java VeritabaniBaglantiTestBes.java

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

35

Sorular ...

© Altuğ B. Altıntaş 2003

Java ve Yazılım Tasarımı - Bölüm 13

36

Sign up to vote on this title
UsefulNot useful