Apache Mina Client

Merhaba arkadaslar, bir önceki yazımda Mina ile basit bir server socket’in nasıl oluşturulabileceğini, NIO tabanlı olduğunu ve mina hakkında birkaç detay vermiştik. Bugün ise Mina ile bir socket client oluşturmaya çalışacağız.

Apache Mina Client

Everything going to be ok if server socket is alive. ~ Alican Akkus

Bir önceki yazımızda server socketi olusturup herhangi bir port’a bind etmiş ve daha sonra telnet ile ip ve port adresini yazarak aslında bir client gibi davranmıştık. Bkz: telnet , bugün ise client kodunu yazacagız, mesaj göndereceğiz ve açtığımız session’un durumunu handle edeceğiz.

Mina ile client socket oluşturmak için şu adımları yapmalıyız;

  • Öncelik olarak server socketin alive olduğunu bilmemiz gerekiyor.
  • Socket Connector oluşturmak ve server ip üzerindeki porta bağlanmamız gerekiyor. Session almak.
  • Session kapandığında safe olacak biçimde yeni session almak, safe şekilde bağlantıyı kapatmak.
  • Mesaj göndermek için sessiona mesaj yazmak.

Bir önceki yazımda kullanmış olduğum IO handler sınıfını olduğu gibi kullanacağız. Yeni oluşturacağımız MinaClient sınıfını connector olarak çalıştıracağız;

MinaClient.java

Kod içerisinde gerekli yerlere yorumlar yazdım, yapı basit çünkü default protocol ile ilerliyoruz.  IoHandler, bir önceki yazımızdaki handler idi. Tekrar yer verelim;

Test classımıza bakalım;

Client’ımız servera bağlandıktan sonra 1 sn aralıklarla mesaj göndermekte. Örneği çalıştırabilmek için server socketin ayakta olması gerekmektedir. Bu nedenle bir önceki yazımda vermis oldugum uygulamayı çalıştırmış olmanız ve 5003 portunda gelen istekleri kabul ettiğini biliyor olmanız gerekmektedir. Yada yazının sonundaki projenin son halini indirip önce server kısmını çalıştırıp daha sonra client tarafını çalıştırırsanız yine çalışacaktır.

Eclipse üzerinde server ve client tarafını çalıştıralim ve consola bakalım. Kişisel tavsiyemdir; consola, log’a, exception tipine, satırına vs vs gibi verilere dikkat edin. Karşılaştığınız hatanın çözümü orada yer almaktadır, sadece doğru analiz etmek size kalan taraftır.

Öncelikle Server socketi ayağa kaldıralim;

Screenshot from 2015-12-05 23:47:45

Server socketin ayağa kalktıgını ve bir clientin baglandıgını görmekteyiz. Client, bizim olusturdugumuz client’dır. Client consola bakalım;

Screenshot from 2015-12-05 23:49:10

Client’ın session aldıktan sonra sessionu açmasını ve mesajı göndermesini görebilirsiniz. “Client message [1449351169754]” asıl gönderilen mesajdır.

Server’ın clienttan aldıgı mesajları görmek icin tekrar server consola dönelim;

Screenshot from 2015-12-05 23:51:29

Client uygulamasını durduralım ve serverın cevabına bakalım;

Screenshot from 2015-12-05 23:52:39

Client tarafında; Connector oluşturmak ve ilgili ip/port’a bağlandıktan sonra session’a mesaj göndermek gibi işler duruyor. Ancak server socket tarafı daha karmaşıktır ve olması gerekende budur. Server socket’ın, bağlanan sessionları tutması, belirli bir sessiondan gelen mesajın karıştırılmaması ve cevap dönülecekse sadece ilgili sessiona cevap dönülmesi gerekmektedir. Bu ve buna benzer örnekler dolayısıla server socketin daha karmasık olması en azından client’a göre doğaldır.

Örnek basit bir client oluşturup mesaj gönderdik, bir sonraki yazımızda default protocol yerine kendi belirleyeceğimiz protocol üzerinden socketlerin haberleşmesini sağlayacağız.

Yazımı burada sonlandırmak istiyorum arkadaslar.

Uygulamanın son haline buradan erişebilirsiniz.

~ Alican Akkus.

2931 Total Views 3 Views Today