Sonunda uzun zamandır ertelediğim bu yazıyı da yayınladım ve kafamdan
sildim. Aşağıda göreceğiniz kodlar basit bir sohbet programının
kodlarıdır. Ayırca java’da soket programlama için de bir örnek teşkil
etmektedir. Programı NetBeans ile yazdım ve NetBeans tarafından otomatik
olarak eklenen kodlar aşağıda yer almamaktadır.
Kodları ve programın işleyişini daha iyi anlayabilmeniz için bir
takım terimleri ve yapıları bilmeniz gerektiğini düşünerekten öncelikle
bu bilgileri verelim.
Protokol Nedir?
Herhangi bir ağ içerisinde bulunan cihazların birbirleriyle
haberleşmeleri için bellirli protokoller tanımlanmıştır. Bu protokoller
sayesinde kullanıcılar alt yapıdaki detaylarla uğraşmadan veri
alışverişini gerçekletirebilir.
Farklı amaçlar için farklı protokoller geliştirilmiştir. Bu farklı
protokollerin birbirlerine göre üstünlük ve zayıflıkları vardır.
Kullanım alanına göre doğru protokol seçilmelidir.
Yaztığım programda User Datagram Protokol – UDP protokolünü
kullandım. UDP protokolü veri iletişimini bağlantı kurmaksızın paketler
gönderir. Bağlantı kurulmadığından dolayı protokolden mesajın
iletildiğine dair herhangi bir bilgi edinilemez. Bu tip bir onay sistemi
kullanıcı tarafından isteğe bağlı olarak ayrıca yazılmalıdır. UDP’de
gönderilen paketlerin herhangi bir sıra numarası ve sırayla ulaşma
garantisi de yoktur. Bu tip özellikler için ekstra başlık bigileri
gerekmektedir, UDP bu başlık bilgilerini içermediğinden başlık bilgisi
de diğer protokllere göre (ör:TCP) daha küçüktür. Başlık bilgilerinin
küçük olması sayesinde UDP daha az bant genişliğine ihtiyaç duyar. Bu
avantajından dolayı gerçek zamanlı ses veya görüntü iletişiminde tercih
edilir.
Port Nedir ?
Portlar bir bilgisayarın ağda sahip olduğu IP adresinden dışarıya
açılan birbirinden bağımsız kapılar olarak tanımlanabilir. Port
numaraları 16bit ile ifade edildiğinden 65536 adet port mevcuttur.
Herhangi bir uygulamanın kullanacağı port numarası seçilirken daha
önceden başka bir programın bu portu kullanıp kullanmadığına dikkat
edilmelidir. Aksi halde iki uygulama da düzgün çalışmayabilir.
UDP protokolünde veri iletişimi yapmak için IP ve PORT ikilisini
kullanarak adresleme yapmak gerekir. Bu ikili kullanar bir soket
yaratılır ve iletişim soket üzerinden yapılır.
Soket Nedir ?
Soket IP adresi ve Port birleşiminden oluşan uygulamalarda ağ
içerisinde bulunan alt düzey ayrıntılarla uğraşmadan veri alışverişi
yapmayı sağlayan ve unix sistemlerde bulunan dosya yapısına benzer bir
yapıdır. TCP/IP protokolünde mevcut olan soketler uygulama seviyesinde
bağlantıları simgelemeye yarar.
Yaygın olarak kullanılan iki türlü soket yapısı mevcuttur. Bunlardan
biri SOCK_STREAM ile tanımlanan ve streaming yapmaya yarıyan soket
tipidir. Bu soket yapısında bağlantılı (connection oriented) haberleşme
kullanılır. Yani haberleşme sırasında aktif olan bağlantı ve soket
yapısı mevcuttur. TCP protokolü SOCK_STREAM tipinde soketler üzerinden
haberleşme yapar. Bu soketlerden yapılan iletişim tamamen güvenlidir.
Yani yanlış veri iletimi olması durumunda protokolden dolayı sistem
kararlı ve doğru veriyi iletene kadar tekrar gönderme/isteme işlemini
yapar. Ayrıca bu soketler üzerinden gönderilern verilerin alıcı tarafa
da aynı sırayla ulaşacağı garanti edilmiştir. “A” ve “B” datasını içeren
iki mesajı gönderdiğimizde alıcı tarafta yine “A” ve “B” sırasıyla
alınacağı garanti edilmiştir.
Diğer bir soket türü ise SOCK_DGRAM ile tanımlanan datagram tipi
soketlerdir. TCP’ye göre güvensiz veri iletişimi yapar. Bunun nedeni
gönderilerecek datayı UDP protokolü üzerinden yollaması ve paketi bir
kez ağa bıraktıktan sınra herhangi bir takip işlemi yapmamasıdır. Yani
kullanıcıya verinin ulaşıp ulaşmadığına dair herhangi bir bilgi
sağlamaz. Buna karşılık alıcıdan onay mesajı yollatarak iletimi biraz
daha olsun kararlı hale getirebilinir. Bu soketin tercih edilme sebebi
ise stream türünde yayınlardır. Her ne kadar streaming soket “streaming”
için daha uygun gibi görünsede datagram tipi soketler bu iş için daha
uygundur. Bunun sebebi kayıp paketlerin tekrar yollanması, aşırı başlık
bilgisi, çok bant genişliği harcaması, bağlantının sürekli olarak aktif
kalması gibi dezavantajlarından dolayı datagram soketler streaming
işlemi için tercih edilmektedir.
Paket Nedir ?
UDP ile bağlantısız haberleşme yapıldığından veriler birbirinden
bağımsız paketler ile gönderilir. TCP protokolünde bağlantılı haberleşme
yapıldığından veri iletişimi başlarken bir bağlantı kurulur ve sürekli
olarak bu bağlantı üzerinden haberleşme sağlanır. Veri iletişimi olmasa
dahi bağlantı açık kalır. UDP protokolü için Java dilinde belirlenen
paket değişken tipi Datagram Packet’dir. Her bir paket içerisinde
gönderilecek veri ve paketteki veri miktarını belirten değişkenler
vardır. Bunun yanı sıra paketi gönderdiğimiz bilgisayarın IP adresi ve
port numarası da pakete dahil edilmelidir.
Gönderici ve alıcı adresleri de UDP paketinin içinde olmasına rağmen
bu paketler tek başına iletişim için yeterli değildir. UDP paketleri de
ağda iletim için IP protokolünü kullanır. Bundan dolayı her paketin
başına IP başlık bilgileri de eklenir. Aşağıdaki şekilde bir IP başlığı
ve altında ise UDP paketinin temel yapısı gösterilmiştir:
[Linkleri görebilmek için üye olun veya giriş yapın.]
[Linkleri görebilmek için üye olun veya giriş yapın.]
Programın Genel Yapısı
Program sunucu/istemci mimarisine dayanarak çalışmaktadır. İstemci
kısmı Applet olarak yazıldı ve web üzerinden sohbet edebilme imkanı
sağlamaktadır. Sunucu kısmı ise masaüstü uygulaması olarak yazılmıştır.
Sunucu çalışmaya başlar başlamaz ilgili portu dinleyerek gelen paketleri
değerlendirerek mesajları istemciler arasında iletmektedir. İstemciler
birbirleri arasında direk mesajlaşmak yerine sunucu üzerinden
mesajlaşmaktadır. Bundan dolayı istemcilerde diğer istemcilerin
adresleri yerine sadece isimleri tutulmaktadır.
sildim. Aşağıda göreceğiniz kodlar basit bir sohbet programının
kodlarıdır. Ayırca java’da soket programlama için de bir örnek teşkil
etmektedir. Programı NetBeans ile yazdım ve NetBeans tarafından otomatik
olarak eklenen kodlar aşağıda yer almamaktadır.
Kodları ve programın işleyişini daha iyi anlayabilmeniz için bir
takım terimleri ve yapıları bilmeniz gerektiğini düşünerekten öncelikle
bu bilgileri verelim.
Protokol Nedir?
Herhangi bir ağ içerisinde bulunan cihazların birbirleriyle
haberleşmeleri için bellirli protokoller tanımlanmıştır. Bu protokoller
sayesinde kullanıcılar alt yapıdaki detaylarla uğraşmadan veri
alışverişini gerçekletirebilir.
Farklı amaçlar için farklı protokoller geliştirilmiştir. Bu farklı
protokollerin birbirlerine göre üstünlük ve zayıflıkları vardır.
Kullanım alanına göre doğru protokol seçilmelidir.
Yaztığım programda User Datagram Protokol – UDP protokolünü
kullandım. UDP protokolü veri iletişimini bağlantı kurmaksızın paketler
gönderir. Bağlantı kurulmadığından dolayı protokolden mesajın
iletildiğine dair herhangi bir bilgi edinilemez. Bu tip bir onay sistemi
kullanıcı tarafından isteğe bağlı olarak ayrıca yazılmalıdır. UDP’de
gönderilen paketlerin herhangi bir sıra numarası ve sırayla ulaşma
garantisi de yoktur. Bu tip özellikler için ekstra başlık bigileri
gerekmektedir, UDP bu başlık bilgilerini içermediğinden başlık bilgisi
de diğer protokllere göre (ör:TCP) daha küçüktür. Başlık bilgilerinin
küçük olması sayesinde UDP daha az bant genişliğine ihtiyaç duyar. Bu
avantajından dolayı gerçek zamanlı ses veya görüntü iletişiminde tercih
edilir.
Port Nedir ?
Portlar bir bilgisayarın ağda sahip olduğu IP adresinden dışarıya
açılan birbirinden bağımsız kapılar olarak tanımlanabilir. Port
numaraları 16bit ile ifade edildiğinden 65536 adet port mevcuttur.
Herhangi bir uygulamanın kullanacağı port numarası seçilirken daha
önceden başka bir programın bu portu kullanıp kullanmadığına dikkat
edilmelidir. Aksi halde iki uygulama da düzgün çalışmayabilir.
UDP protokolünde veri iletişimi yapmak için IP ve PORT ikilisini
kullanarak adresleme yapmak gerekir. Bu ikili kullanar bir soket
yaratılır ve iletişim soket üzerinden yapılır.
Soket Nedir ?
Soket IP adresi ve Port birleşiminden oluşan uygulamalarda ağ
içerisinde bulunan alt düzey ayrıntılarla uğraşmadan veri alışverişi
yapmayı sağlayan ve unix sistemlerde bulunan dosya yapısına benzer bir
yapıdır. TCP/IP protokolünde mevcut olan soketler uygulama seviyesinde
bağlantıları simgelemeye yarar.
Yaygın olarak kullanılan iki türlü soket yapısı mevcuttur. Bunlardan
biri SOCK_STREAM ile tanımlanan ve streaming yapmaya yarıyan soket
tipidir. Bu soket yapısında bağlantılı (connection oriented) haberleşme
kullanılır. Yani haberleşme sırasında aktif olan bağlantı ve soket
yapısı mevcuttur. TCP protokolü SOCK_STREAM tipinde soketler üzerinden
haberleşme yapar. Bu soketlerden yapılan iletişim tamamen güvenlidir.
Yani yanlış veri iletimi olması durumunda protokolden dolayı sistem
kararlı ve doğru veriyi iletene kadar tekrar gönderme/isteme işlemini
yapar. Ayrıca bu soketler üzerinden gönderilern verilerin alıcı tarafa
da aynı sırayla ulaşacağı garanti edilmiştir. “A” ve “B” datasını içeren
iki mesajı gönderdiğimizde alıcı tarafta yine “A” ve “B” sırasıyla
alınacağı garanti edilmiştir.
Diğer bir soket türü ise SOCK_DGRAM ile tanımlanan datagram tipi
soketlerdir. TCP’ye göre güvensiz veri iletişimi yapar. Bunun nedeni
gönderilerecek datayı UDP protokolü üzerinden yollaması ve paketi bir
kez ağa bıraktıktan sınra herhangi bir takip işlemi yapmamasıdır. Yani
kullanıcıya verinin ulaşıp ulaşmadığına dair herhangi bir bilgi
sağlamaz. Buna karşılık alıcıdan onay mesajı yollatarak iletimi biraz
daha olsun kararlı hale getirebilinir. Bu soketin tercih edilme sebebi
ise stream türünde yayınlardır. Her ne kadar streaming soket “streaming”
için daha uygun gibi görünsede datagram tipi soketler bu iş için daha
uygundur. Bunun sebebi kayıp paketlerin tekrar yollanması, aşırı başlık
bilgisi, çok bant genişliği harcaması, bağlantının sürekli olarak aktif
kalması gibi dezavantajlarından dolayı datagram soketler streaming
işlemi için tercih edilmektedir.
Paket Nedir ?
UDP ile bağlantısız haberleşme yapıldığından veriler birbirinden
bağımsız paketler ile gönderilir. TCP protokolünde bağlantılı haberleşme
yapıldığından veri iletişimi başlarken bir bağlantı kurulur ve sürekli
olarak bu bağlantı üzerinden haberleşme sağlanır. Veri iletişimi olmasa
dahi bağlantı açık kalır. UDP protokolü için Java dilinde belirlenen
paket değişken tipi Datagram Packet’dir. Her bir paket içerisinde
gönderilecek veri ve paketteki veri miktarını belirten değişkenler
vardır. Bunun yanı sıra paketi gönderdiğimiz bilgisayarın IP adresi ve
port numarası da pakete dahil edilmelidir.
Gönderici ve alıcı adresleri de UDP paketinin içinde olmasına rağmen
bu paketler tek başına iletişim için yeterli değildir. UDP paketleri de
ağda iletim için IP protokolünü kullanır. Bundan dolayı her paketin
başına IP başlık bilgileri de eklenir. Aşağıdaki şekilde bir IP başlığı
ve altında ise UDP paketinin temel yapısı gösterilmiştir:
[Linkleri görebilmek için üye olun veya giriş yapın.]
[Linkleri görebilmek için üye olun veya giriş yapın.]
Programın Genel Yapısı
Program sunucu/istemci mimarisine dayanarak çalışmaktadır. İstemci
kısmı Applet olarak yazıldı ve web üzerinden sohbet edebilme imkanı
sağlamaktadır. Sunucu kısmı ise masaüstü uygulaması olarak yazılmıştır.
Sunucu çalışmaya başlar başlamaz ilgili portu dinleyerek gelen paketleri
değerlendirerek mesajları istemciler arasında iletmektedir. İstemciler
birbirleri arasında direk mesajlaşmak yerine sunucu üzerinden
mesajlaşmaktadır. Bundan dolayı istemcilerde diğer istemcilerin
adresleri yerine sadece isimleri tutulmaktadır.