Laborator 09. Descoperirea Serviciilor de Rețea

O problemă des întâlnită de un dispozitiv mobil este descoperirea de funcționalități care pot fi accesate într-o rețea locală vizitată. De obicei, se dorește stabilirea de conexiuni punct la punct peste care pot fi tehnologiile clasice de tipul client/server sau RPC. Totodată, pot fi expuse și servicii clasice ale unor alte dispozitive din cadrul rețelei locale cum ar fi: calculatoare, imprimante, televizoare, ceasuri inteligente, acestea putând fi astfel accesate fără configurare prealabilă.

Serviciile din rețea pot fi implementate folosind două variante:

  1. Android Network Service Discovery (NSD), un protocol integrat în Android începând cu nivelul de API 16 (Jelly Bean), pentru implementarea de servicii disponibile în rețeaua locală (neabordat în acest laborator);
  2. JmDNS, un proiect open-source care își propune implementarea în Java a unor funcționalități legate de proiectarea și dezvoltarea de servicii disponibile în rețeaua locală, fără a realiza nici un fel de configurări legate de infrastructura de comunicație.

Atât Android NSD cât și JmDNS folosesc multi-cast DNS (utilizarea de operații DNS în rețele de dimensiuni mici, în care nu există un server propriu-zis pentru un astfel de serviciu) pentru accesul la servicii în rețeaua locală.

Operațiile utilizate în implementarea serviciilor de rețea sunt:

  1. configurarea diferiților parametri (pregătirea mediului de lucru);
  2. înregistrarea unui serviciu, prin care celelalte dispozitive din rețeaua locală pot afla detalii cu privire la funcționalitatea oferită (tip de serviciu, adresă, port, descriere);
  3. descoperirea unui serviciu, prin care un dispozitiv este informat cu privire la serviciile care pot fi accesate în rețeaua locală, filtrându-le în funcție de denumire și tip;
  4. rezolvarea unui serviciu, prin care sunt identificate adresa și portul la care trebuie realizată o conexiune în vederea exploatării funcționalității pe care acesta o pune la dispoziție.

Note

Operațiile de înregistrare respectiv descoperire / rezolvare sunt independente, astfel încât o aplicație poate alege doar să înregistreze un serviciu, în timp ce altă aplicație poate doar să descopere / rezolve serviciile din rețeaua locală. Totodată, operațiile pot fi realizate și împreună, fără a exista o ordine prestabilită.