TCP/IP UYGULAMALARI

TCP/IP birçok protokolü içerisinde bulunduran alt yapı olarak IP protokolünü kullanın protokoller ailesi diye düşünülebilir. FTP HTTP gibi popüler protokollerde bu protokol ailesinin standart protokolleridir.IP protokolunde tipik olarak programlama ili 2 çeşit protokol kullanılabilir.

1. TCP(TRANSMISSION CONTROL PROTOCOL)

TCP iletim kontrolü , gönderilemeyen paketlerin yeniden gönderimi,gönderilmiş paketlerin sıraya dizilmesi ve gönderilmiş paketlerin gönderim bilgilerinin alınması gibi bir takım kontrolleri içerisinde barındıran güvenilir bir protokoldür.

2. UDP (User Datagram Protocol)

UDP ise paketi bir datagram şeklinde gönderen ve gönderilip gönderilmediği ile ilgilenmeyen hızlı fakat güvenilmeyen bir protokoldür.

TCP ve UDP arasında programcı öncelikli olarak TCP'yi düşünmelidir.TCP fazla geldiğinde UDP'yi tercih etmelidir.

TCP HABERLEŞMESİ

TCP bağlantılı(CONNECTION ORIENTED) çalışan bir sistemdir.Genel olarak bağlanan programa Client , bağlanılan programa Server denilir.

Server program dinleyen (listener) programdır. Client ise hizmet almak için önce bağlanacak olan processdir. Server program gelecek clientlara ilişkin dinlemede bekler. Client programın serverdan hizmet alması için el sıkışması(hand shaking) gerekir.El sıkışma kullanılacak Ip'de protokolde ve port numarasında anlaşmadır.Yani client programın server programın Ipsini bilerek ve port numarasıyla ona erişmesi gerekir.

TCP haberleşmesi soketlerle yapılır.Soketler TCP haberleşmesi yapmaya olanak sağlayan genel olarak sınıflar şeklinde implemente edilen sınıflardır.Burada Client programlarımımız Android. Server programlarımız ise Java konsol uygulaması olarak geliştirilecektir.

Genel olarak server ve client programların organizasyonu şu şekildedir:

Server Client
soket aç soket Aç
bind connect
listen send/recv
accept soket kapat
send/recV
soket kapat

Burada bind işlemi hangi network kartının kullanılacağına ilişkin belirlemenin yapılmasıdır.Hiç bir belirleme yapılmazsa Default network kartı bind edilir.

Server program javada server soket isimli bir sınıfla yazılabilir.Server programlar genele olarak iterative ve concurrent olmak üzere iki grupta düşünülebilir.

Iterative serverler bir clientın işlemi bitmeden bir sonraki cliente hizmet veremez.

Concurent olanlarda birden fazla cliente hizmet verebilirler.

[DROPBOX]062-TCPOperationsNetworkProgramming

062-TCPOperationsNetworkProgramming Ne yapar? Bu dosya içinde

  • Iterative Java server ,
  • Concurent Java server ,
  • Java Client ,
  • Android Thread Sınıfı ile Client ,
  • Android AsyncTask Sınıfı ile Client , projeleri yer alır.

    Serilaziable ile gönderme tavsiye edilmez.Yavaş kalır. IOS daki .Netteki serilazible farklı oldugu ıcınde kullanılmaz. Telnet ile port dinlemesi yapılabilir.

Android Network Uygulamaları

Android network uygulamaları için java soket sınıfı kullanılabilir.Ancak Android üzerine network uygulamaları için izin gerekmektedir;

 <uses-permission android:name="android.permission.INTERNET"/>

Bu izin Android 6.0 ile birlikte çalışma zamanı izni de gerektirmektedir.Ancak diğer sürümlerde de doğrudan AndroidManifest.xml deki izinler yeterli olacaktır.

[Dropbox]062-TCPOperationsNetworkProgramming

Anahtar Notlar: Edittext kontrölünün inputType attribute ile belirli bir özelliği göre maskelenmiş Edittext kontrolleri oluşturulabilir.Aslında designer programda bulunan çeşitli editTextlerde bu özellik set edilmiştir.

UDP/IP Haberlşemesi

Bilindiği gibi TCP güvenilir , bağlantılı çalışan ve Stream tabanlı çalışan bir protokoldür.Ancak spesifik de olsa bazı uygulamalarda yavaş kalabilmektedir.Böylesi durumlarda UDP haberleşme protokolü tercih edilmelidir.

Javada dolayısıyla Android'de UDP/IP haberleşmesi için ayrı sınıflar bulunmaktadır.UDP soketleri için DatagramSocket sınıfı kullanılmaktadır. DataGram bir paket haberleşmesi olduğuna göre gönderilecek datalar DatagramPacket isimli bir paketle sarmalanmalıdır.

DatagramSocket sınıfı closable arayüzünü implemente eden bir arayüzdür.

[Dropbox]072-UdpSample

072-UdpSample Ne Yapar?

Konsoldan verilen port numarasıyla dinleme portu açılır.

Gönderilecek datalar datagramPacket ile sarmalanmalıdır.

ConsoleClient'da consoldan yazılan yazılar servere gonderilir.

AndroidClient'da

UDP haberleşmesinde de el sıkışma için port numarası gereklidir.

DatagramSocket sınıfının int parametreli constructurı bir port numarası beklemektedir.Bu port numarasıyla ve nesne yaratılarak beklemeye geçilebilir.

DatagramSocket sınıfının bu başlangıc metodu otomatik bind işlemini de yapmaktadır.Programcı isterse bind işlemini bind metoduyla ve ya SocketAddress parametreli başlangıç metodu ile de yapabilir.

UDP protokolünde bir bilgi beklenmesi için receive metodu çağrılmalıdır.Bu metod akışı bloke ederek bekler. receive metodu DatagramPacket parametresi alır. DatagramPacket'in gönderilecek ve ya alınacak Datagrampacket'in yapısını belirlemektedir.

Client uygulama için Ip'nin bilinmesi gerektiğinden DatagramSocket(int port , InetAddress laddr) Inetadress sınıfı ip protkolünde ip adresi temsil eden genel bir yapıdır.

Basit olarak bir İnetAdress nesnesi getByName isimli statik bir metod yardımıyla elde edilebilir.

Client programın organizasyonu gönderilecek ip adddresin ve port numarası dataGramPacket içerisinde sarmalancak şekilde belirtilebilir.Bu durumda server ve client programlar aynı makine de çalıştırılabilir.

UDP protokolü veri kaybına yol açabileceğinden genelde mesajların uzunlukları gibi bilgiler mesajdan önce gönderilmez.Mesajın kendisi gönderilir.mesajın kendi içerisinde ön bilgiler ayrıştırılarak devam eder.

Android İşletim Sistemi üzerinde UDP işlemleri için Internet izninin alınması gerekmektedir.

Anahtar Notlar:

Android işletim Sisteminde bir uygulama ana Thread'i içerisinde İnternet işlemleri yapamaz.Burada internet diye her türlü ağ işleminden bahsedilmiştir.

[Dropbox]073-UdpSampleService

073-UdpSampleService Ne Yapar?

AndroidClientten surekli olarak OK mesaj gonderilir.

Butona basinca farkli bir mesaj gonderilir

Client server uygulamalarda bilgilerin text olarak gönderilmesine çok sık rastlanmaktadır. Bu işlem binary olarak veri göndermekten çoğu zaman yavaşta olsa, başka platformlardan erişilebilirlik veya kolay implemantasyon anlamında tercih edilebilmektedir. TCP/IP protokol ailesinin birçok uygulama program (FTP, Telnet...) text haberleşmesi ile çalışabilmektedirler.

Aşağı seviyede bir yazı gönderimi için, yazının uzunluğu net olarak belli değilse, bu durumda önce yazının uzunluğu gönderilmeli(bu gönderim binary yapılabilir) daha sonra yazının kendisi gönderilmelidir. Ancak yüksek seviyeli ortamlarda bu işlemi otomatik olarak halleden sınıflar bulunmaktadır. Örneğin DataOutputStream ve DataInputStream sınıfları writeUTF/readUTF bu işlemi içsel olarak halletmektedir. Şüphesiz başka platformlarla haberleşirken bu metotların nasıl içsel olarak çalıştığından bağımsız olarak, byte dizisi ile haberleştirilmelidir.