Ana içeriğe atla

Java Ağ Programlama - 5

Merhaba arkadaşlar. Artık Java ile soket programlamaya başlıyoruz. İsterseniz ilk olarak soket nedir tanımlamakla başlayalım

Soket, istemci ve sunucu arasında oluşturulan bir iletişim kanalıdır diyebiliriz. O yüzden soket programlama çok önemlidir. İki bilgisayar arası iletişim demek herşey demek. Bu iletişimde bir taraf kendisine bağlanılmasını bekleyen sunucu(server) diğeri ise bu sunucuya bağlanan istemci,misafir(client)'dir.

Java'da sunucu ve istemci oluşturmak kolaydır.
Belki programlama yaparken farklı gelecek şey, stream(akışlar) dır. Hele ki benim gibi Python gibi bir dilde soket programlama yaptıktan sonra Java'da soket programlama'ya geçerseniz çok şaşırabilirsiniz.

Şimdi ilk olarak,  Java'da bir server oluşturalım. Bunun için java.net paketi içinde bulunan ServerSocket sınıfını kullanacağız. Aşağıdaki kodda, basit bir server oluşturulmasını inceleyelim


Yaptığımız şeyler çok basit. Öncelikle ServerSocket sınıfı ile bir soket nesnesi oluşturduk. Ve, bunu yaparken istediğimiz port'tan dinlemek için bunu belirttik. Ancak, port belirlerken dikkat etmeniz gereken, 0-1024 arasında olmamasına dikkat etmenizdir. Çünkü, bu port aralığı özel servisler için ayrılmıştır. Eğer kullanmaya kalkarsanız, gerekli izne sahip olmadığınıza dair bir hata alırsınız. Eğer hangi portu hangi servis kullanıyor diye incelemek isterseniz, https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers adresine bakabilirsiniz.

Evet konuya gelelim. Soket nesnesini oluşturduktan sonra, hemen altında, belli bir süre bağlantı gelmez ise bağlantının kapatılmasını sağlamak için milisaniye cinsinden bir zaman belirledik. accept() metodu ile bağlantı bekledik ve gelen bağlantıyı bir soket nesnesine aktardık, ki daha sonra bunu kullanarak geri mesaj gönderebilmek için.

Gelen bağlantının bazı özelliklerine erişebiliriz. Mesela getLocalAdress() metodu ile bağlantının IP adresini öğrenebiliriz. Ama bu adres, yerel adrestir. Ve getPort() ile bağlantı yapılan port'u görebiliriz. getOutputStream() ile mesaj gönderebiliriz. Bunun için PrintWriter kullanılabilir. Birazdan istemci kısmını yazdığımız zaman göreceğiz.

Bu derslerde basite kaçarak,PrintWriter yada Scanner gibi sınıfları kullanıyor olmam birşeyi değiştirmeyecektir. Olayın mantığını anlatmak için bunları kullandım. Yoksa BufferedWriter vs vs kullanıp kimsenin canını sıkmak istemiyorum.

Şimdi ise, bir server'a bağlanan istemci(client) sınıfı yazalım. Burda işler biraz daha basit. İnceleyelim


Tabi ki ilk olarak sunucu programı çalıştırmamız gerektiğini söylememe gerek yok.

Bu sefer bağlantı kurmak için bir Socket nesnesi oluşturuyoruz. Bunun için ilk olarak IP adresi, sonrada port'u yazıyoruz. IP yerine benim localhost yazdığıma dikkat edin. Bu yerel ağı ifade eder, bizde programımızı yerel ağda çalıştırıp test ettiğimiz için bağlantı sıkıntısı olmayacaktır. localhost yerine "127.0.0.1" yada "0.0.0.0" yazabilirsiniz farketmez, zira hepsi localhost'u ifade eder. Ancak "0.0.0.0" adresi, bilgisayarınızın ağdaki diğer bilgisayarlara da açılmasını sağlar.

Şimdi istemci tarafında IP ve port'u yazdık ve sunucuya bağlandık. PrintWriter yardımı ile sunucuya mesajımızı gönderdik ve en sonunda bağlantıları kapattık.

Eğer sunucuyu olağan bir şekilde sonlandırırsanız, port açık olarak kalabilir. Bu durumda aynı portu kullanmak istediğiniz zaman hata verecektir. Bu durumda başka bir porta geçmeniz çözüm olabilir, editörü açıp kapatmanız durumunda da açık port da kapanır.

Dilim döndüğü kadar anlatmaya çalıştım. Kusurumuz var ise affola. Başka yazılarda buluşmak dileği ile...

Yorumlar

Bu blogdaki popüler yayınlar

Python Subprocess

subprocess modülü, yeni bir process oluşturmayı sağlayan, bunların girdi-çıktılarını ele alma imkânı veren ve dönüş kodlarını almayı sağlayan bir modüldür. Yani daha basit bir şekilde, program içinde program çalıştırmaya imkan veren bir modüldür. Subprocess Modülünün Kullanımı subprocess basit bazı process'leri kullanmak için birkaç tane fonksiyon sunuyor. Daha karmaşık bir process çalıştırmak isterseniz, Popen sınıfını kullanabilirsiniz. Bunlara detaylı bir şekilde değinmeye çalışacağız. Şimdi basit fonksiyonları inceleyelim

Infix to postfix dönüşümü

Infix to postfix dönüşümü, operatorün ortada olduğu a+b yazım şeklini operatorün sonda olduğu ab+ yazım şekline dönüştürme işlemidir. Bu yazıda iki şekilde dönüşümden bahsedeceğim:   1) Stack yapısı kullanarak dönüştürme 2) Kağıt üstünde el ile dönüştürme    Infix gösterimi, bizler için kolay bir gösterim olsa da makineler için öyle değildir. İfadeyi soldan sağa doğru okurken a + b * c işleminde önce b ile c yi çarpıp sonra da a ile toplamayı kolay bir şekilde yapabiliriz çünkü bizim ifadeyi sıra ile soldan sağa adım adım giderek okuma zorunluluğumuz yok. Önce b*c nin öncelikle olduğunu görerek oradan başlar, sonra a ile kolayca toplarız.

Python Soket Programlama

Merhaba arkadaşlar. Bugün sizlerle birlikte Python'da socket programlama yapacağız. Bunun için Python da socket kütüphanesini kullanacağız. Peki nedir bu socket programlama? Soket programlama, sizin iki program arası yada iki bilgisayar arası iletişim kurmanızı sağlar. İşte bizde bugün iki programımızı birbiri ile haberleştireceğiz. Bunun için elimizde iki program olacak. Birinci program,mesaj bekleyen program olacak, diğeri ise mesaj gönderen program.