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...
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
Yorum Gönder