Android Socket Programlama


Görsel Referansı


Socket programlama aynı ağdaki iki cihazın birbiriyle haberleşmesini sağlamanın bir yoludur. Biri clienttaki, biri serverdaki olmak üzere iki socket haberleşir.


Bir socketin adresi IP ve porttan ibarettir. Server uygulaması, tanımlı port üzerinden clientları dinlemeye başlar. Client ise serverın IP'si ve açtığı port üzerinden bağlantı kurar. Daha sonra iletişim çift yönlü olarak devam edebilir.



Örnek bir server socket adresi 192.168.1.10:9876


Socket programlama IoT uygulamalarında sıkça tercih edilen bir yöntemdir. Cihazlar ağ üzerinde haberleşirler. İletişim TCP/IP protokolü üzerinden ilerlediği için environment bağımsızdır. Yani Android, bir PLC ile; Arduino, bir Linux makine ile haberleşebilir.


Android'de socket ile veri gönderme/okuma işlemleri network işi olduğu için UI/Main thread'de yapılmamalıdır.


Android uygulamasının server olduğu TCP protokolünü kullanan bir senaryoya bakalım:

  • Manifest dosyasına izinleri ekliyoruz



  • Uygulamanın arka planda ve uzun süreli çalışması, Android tarafından kill edilmesini istemediğimiz için foreground service oluşturalım.

  • Foreground service ayaklandığında, yani onCreate'te, socket işlemleri için yeni bir thread oluşturalım, çünkü hala main thread'deyiz.

  • Foregorund service notification ayarlarını ekleyelim.

  • Oluşturduğumuz threadde socketimizi port numarası ile tanımladık, şimdi clientları dinlemeye başlayabiliriz.

  • Her yeni client bağlantısı için yeni bir thread oluşturuyoruz


  • Bağlı clienttan gelen mesajı dinleyip cevap olarak "Hello Client" mesajını dönüyoruz


  • Manifest dosyasında service'imizi tanıtalım



  • Service'i launcher activity'den başlatalım



Bu uygulamayı Android cihazınızda çalıştırıp, aynı ağdaki bilgisayarınız ile de terminalden (Linux, Windows, MacOS) netcat toolu yardımıyla client bağlantısı kurabilir, mesaj gönderebilirsiniz:

nc 192.168.1.10 9876

TCP server uygulamasını en basit haliyle oluşturduk. Client uygulaması da oldukça benzer şekilde oluşturulabiliyor.


Örneği sadeleştirmek adına kullanıcı etkileşimini dahil etmedik. Grafik arayüz geliştirmeleri ile port, gönderilecek mesaj değiştirilebilir hale getirilebilir.


Birbiri ile haberleşecek şekilde tasarlanan client ve server uygulamalarının kaynak kodlarına buradan erişebilirsiniz:

https://github.com/perihanmirkelam/TcpServer

https://github.com/perihanmirkelam/TcpClient



Kaynaklar:

https://developer.android.com/reference/java/net/Socket

https://docs.oracle.com/javase/tutorial/networking/sockets/index.html

https://www.cs.dartmouth.edu/~campbell/cs50/socketprogramming.html

https://www.geeksforgeeks.org/introducing-threads-socket-programming-java/

https://www.tutorialspoint.com/unix_sockets/what_is_socket.htm

https://www.tutorialspoint.com/sending-and-receiving-data-with-sockets-in-android


#socketprogramming #android #androidsocket


0 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın