Hosgeldiniz
Ben Kimim?

C.V.
Bilgi paylaþtýkça çoðalýr.Ýþte ispatý,
bende var bir elma, sende var bir elma, gel elmalarý deðiþelim; bende var bir elma, sende var bir elma.

Þimdi bende var bir bilgi, sende de var bir bilgi, gel bilgileri deðiþelim; bende oldu iki bilgi, sende oldu iki bilgi.Nasýl güzel deðilmi?...

Ben bilgilerimi ortaya koyuyorum benimle bilgi zengini olmak istermisiniz?..



Kategoriler


Site nasýl olmuþ?
Daha iyi olabilirdi
Ýdare eder
Güzel
Süper
Süper ötesi...
     
Anket
JAVA ile socket programlama
9 Yil öncesi . . .
Java Socket Client Server OutputStream

Son günlerde java ile ilgileniyorum. Son olarak ta, Seray UZGUR arkadaşım ile geliştirmiş olduduğumuz paylaşım programını Java ile tekrar yazıyorum.(Paylaşım programının c# ile yazılmış kodları ve gerekli dökümanları arkadaşım SERAY UZGUR'un blog'unda mevcuttur.)Java ile network programı geliştirirken kullannacağınız socketler hakkında bilgi vereceğim.

Ilk olarak socket nedir?
Socketler sizin internet bağlantınızın ve diğer bağlantıların arasında duran soyut birimlerdir. Yani bilgisayarların ağ ortamında birbirleriyle iletişim kurmalarına yarayan birimlerdir.
Java da socketler ile ilgili sınıf var bu yazımda ondan bahsedeceğim.

Soket bağlantımın uç noktası, istemciyi(CLIENT) tarayıcım aracılığıyla kullanıyorum, sunucu(SERVER) bana bilgi iletiyor ama nasıl? Bu soruya cevap alabilmeniz için umarım yazımın kalan kısmı giriş niteliğinde de olsa işinize yarar. Aşağıda Java kullanarak kendi sunucunuzu yazabilmeniz için küçük yardımcı bilgiler bulabilirsiniz. Socket sınıfını kullanabilmek için önce onun namespace'ni import etmemiz gerekiyor.
import java.net.*;
Sunucu kısmı için kullanacağımız sınıfın adı "ServerSocket", aşağıda bu sınıfın tanımlanmasını görmektesiniz.
ServerSocket server;
Sunucunuzun internete bağlanması için onu bir porta yönlendirin.Port dediğim terimi bilgisayarların kapıları olarak düşünün.(Maximum 65532 tane port vardır. ilk 1000 port numaraların çoğu windows veya temel uygulamalar tarafından kullanılmaktadır.) Portların numaraları vardır. portNo'ya istediğiniz bir port numarasını atayın ve bu port numarasıyla yeni bir ServerSocket nesnesi oluşturun.
int portNo;
server=new ServerSocket(portNo);
Programınız aşağıdaki satırda istemciden istek gelene kadar bekleyecektir. "accept" komutu istemciden gelen istemi farkeder ve istem bilgileri doğrultusunda yeni bir soket nesnesi oluşturur. Yeni oluşan soket nesnesi istemciyi sunucu tarafında temsil eder diyebiliriz.
Socket socket=server.accept();
İnternet ağına bağlı cihazlara addres olarak atanan numara IP (internet protocol adress) dir. Örneğin kendi makinanızda local host unuzun IP'si 127.0.0.1 dir. Localhostumuzun IP'sini ağdaki adres olarak değil, makinanızın adresi olarak düşünelim.
"getInetAdress" burada bize istemcinin IP'sini verecektir.
socket.getInetAddress();
socket nesnelerini içine veri yazılabilir ve içinden veri okunabilir dosyalar olarak düşünebiliriz. İstemcinin bizden ne istediğini anlayabilmek için istemciyi temsil eden socket nesnesinin içeriğini elde edip değerlendirmemiz, yani okumamız lazım. Aynı zamanda istemciye bilgi aktarabilmek için socket nesnesine veri aktarmamız yani yazabilmemiz lazım. İstenen verileri soket nesnesine aktarabilmek için öncelikle veri çıktı işlemlerini kontrol edebileceğimiz bir "OutputStream" nesnesi yaratmalıyız. Bunun için dosyanızın başına OutputStream nesnesinin dahil olduğu java.io namespace'sini eklemeyi unutmayın.
import java.io.*;
// yıldız karakteri o sınıfın altında tanımlı olan herşeyi import etmemize neden olacaktır
//genel olarak bundan kaçının.
OutputStream output;
// gerekli outputstream nesnesi tanımı
output = socket.getOutputStream();
// soketin outputstream nesnesine output nesnesi referans olarak atanır.
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); // soketten veri okumak içinse inputstream nesnesine bir bufferedstream nesnesi referans olarak atanır.
Artık istenen verileri yazmak için byteleri arguman olarak output nesnesinin write metodunu;
output.write(...);
istenen bilgileri satır satır okumak için reader nesnesinin readline metodunu;
String line;
line = reader.readline();
kullanabilirsiniz.

Okuma ve yazma işlemleriniz bittikten sonra, socket ve bufferedreader nesnelerini kapamayı unutmayın.
reader.close();
socket.close();
Eğer kendi sunucu programınızı yazmaya karar verdiyseniz, sunucunuzun sürekli açık olmak zorunda olduğunu unutmayın. Bu durumu serversocket nesnenizi while(true) döngüsü içinde oluşturarak elde edebilirsiniz. Ayrıca eğer sunucu programınız aynı anda birden fazla istemciye cevap vermesini istiyorsanız multithread kullanabilirsiniz. Multithread ne olduğunu ilerleyen zamanlarda blog'uma ekleyeceğim.

Biraz araştırmayla programınızı tamamlamanız dileğiyle. Kolay gelsin.

                    Toplam Puan:102

YORUMLAR Yorum Yaz


seray uzgur 8/2/2008 | 3:08:19
Olm vallahi aklımdan geçiyodu:) Keşke beraber yapsak yine hazır bende java da kasarken süper olurdu... Umarım en kısa zamanda tekrar çalışabilmek dileğiyle
 



Deniz YILDIRIM 8/2/2008 | 6:15:04
Keşke beraber yapsak.. valla java ile çok daha az yıpranırdık... classlar arası iletişim gerçekten çok kolay...:( umarım beraber çalışırız kardeşim benim.
 



bilgehan palalioglu 8/3/2008 | 11:10:17
rss yaaaappppppp:)
 



Deniz YILDIRIM 8/3/2008 | 13:10:53
RSS yapmak kolay dostum...onemli olan usenmemek..:P
 



seray uzgur 8/4/2008 | 0:34:12
evet katılıyorum üşenmemek lazım :) Java nın biraz daha kolay gelmesindeki neden programı zaten bir kere yazmıs olmamız:) java ile aynı seyi yapsak suan c# için böle konusuyo olurdun
 



Deniz YILDIRIM 8/4/2008 | 1:24:24
:) bana deme ben zaten anti c# taraftarıyım..:)
 



seray uzgur 8/4/2008 | 5:55:15
düşman olmadan önce tanı bebiş
 



Deniz YILDIRIM 8/4/2008 | 7:51:55
eheeheh...:) olm yeterince tanidim.Hemde her yönüyle tanıdım.. Ve anti c# taraftari olmakla gururluyum:).. gelde senle bir tartışma yapak özledim tartışmaları..:))
 



ilyas arinc 8/8/2008 | 18:52:10
cicim bana şunu anlatsana:)
 



Deniz YILDIRIM 8/9/2008 | 10:29:53
anlatayim kanka ayipsin.. sen bana joomla ogret..bende sana bunu anlatayim... karsilikli yaparsak herkesin bilgisi cogalir... zaten amacim bunu gerceklestirmek;)