Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator06 [2016/04/08 06:26]
Andrei Roșu-Cojocaru
laboratoare:laborator06 [2017/02/20 20:54] (current)
Line 43: Line 43:
 </​code>​ </​code>​
  
-Pentru dispozitivele care nu permit conectarea cu ''​adb shell''​ in modul tethering [[http://​stackoverflow.com/​questions/​9210152/​set-up-device-for-development-no-permissions|soluție stackoverflow]],​ trebuie creat în Ubuntu fișierul ''/​etc/​udev/​rules.d/​51-android.rules''​ și adăugat codul obținut cu ''​lsusb''​ pentru fabricantul telefonului. Odată dispozitivul de rețea obținut(de exemplu ''​rndis0''​),​ se folosește ''​dhclient rndis0''​ pentru a obține o adresă IP de la telefon).  ​+Pentru dispozitivele care nu permit conectarea cu ''​adb shell''​ in modul tethering [[http://​stackoverflow.com/​questions/​9210152/​set-up-device-for-development-no-permissions|soluție stackoverflow]],​ trebuie creat în Ubuntu fișierul ''/​etc/​udev/​rules.d/​51-android.rules''​ și adăugat codul obținut cu ''​lsusb''​ pentru fabricantul telefonului. Odată dispozitivul de rețea obținut (de exemplu ''​rndis0''​),​ se folosește ''​dhclient rndis0''​ pentru a obține o adresă IP de la telefon.  ​
  
 Pe Windows, dacă dispozitivul mobil nu este detectat, poate fi necesară instalarea unor drivere suplimentare pentru stabilirea legăturii prin intermediul portului USB. Pe Windows, dacă dispozitivul mobil nu este detectat, poate fi necesară instalarea unor drivere suplimentare pentru stabilirea legăturii prin intermediul portului USB.
Line 109: Line 109:
 192.168.56.101:​5555 ​    ​device 192.168.56.101:​5555 ​    ​device
 </​code>​ </​code>​
-  * prin intermediul plugin-ului Genymotion pentru ​mediul integrat ​de dezvoltare ​Eclipse Luna SR1a (4.4.1) - Ctrl + 6.+  * prin intermediul plugin-ului Genymotion pentru ​mediile integrate ​de dezvoltare.
  
 {{ :​laboratoare:​laborator06:​genymotion_ip_addresses.png?​nolink&​700 }} {{ :​laboratoare:​laborator06:​genymotion_ip_addresses.png?​nolink&​700 }}
Line 149: Line 149:
 specificându-se portul pe care rulează emulatorul. specificându-se portul pe care rulează emulatorul.
  
-În consolă, realizarea unei legături între mașina fizică și dispozitivul virtual Android se face prin [[http://​developer.android.com/​tools/​devices/​emulator.html#​portredirection|redirectarea portului]], folosind comanda ''​redir'',​ aceasta suportând mai multe opțiuni:+În consolă, realizarea unei legături între mașina fizică și dispozitivul virtual Android se face prin [[http://​developer.android.com/​tools/​help/​emulator.html#​redirection|redirectarea portului]], folosind comanda ''​redir'',​ aceasta suportând mai multe opțiuni:
   * ''​list'';​   * ''​list'';​
   * ''​add'';​   * ''​add'';​
Line 220: Line 220:
 <code java> <code java>
 String hostname = "​localhost";​ String hostname = "​localhost";​
-int port = 2015;+int port = 2016;
 Socket socket = new Socket(hostname,​ port); Socket socket = new Socket(hostname,​ port);
 </​code>​ </​code>​
Line 315: Line 315:
 Se dorește interogarea serverului National Institute of Standards & Technology, care oferă un serviciu de interogare a datei și orei curente, cu o precizie ridicată, conform [[https://​tools.ietf.org/​html/​rfc867|Daytime Protocol (RFC-867)]]. Se dorește interogarea serverului National Institute of Standards & Technology, care oferă un serviciu de interogare a datei și orei curente, cu o precizie ridicată, conform [[https://​tools.ietf.org/​html/​rfc867|Daytime Protocol (RFC-867)]].
  
-{{ :​laboratoare:​laborator06:​daytime_protocol.png?​nolink&​400 }}+{{ :​laboratoare:​laborator06:​01day_time_protocol.png?​nolink&​400 }}
  
 În acest sens, se va deschide un socket TCP, prin interogarea serverului disponibil la adresa [[time-b.nist.gov|]],​ pe portul 13, în cadrul unui fir de execuție separat (clasa ''​NISTCommunicationThread''​). Întrucât nu este necesară decât operația de primire a unor date, se va crea doar un obiect de tip ''​BufferedReader'',​ citindu-se două linii (una fiind vidă - așadar ignorată, cealaltă conținând informațiile necesare, care se doresc a fi afișate). Întrucât modificarea conținutului unui control grafic nu poate fi realizată decât din contextul firului de execuție în care a fost creat, acesta va fi obținut prin parametrul metodei ''​post()''​ a obiectului respectiv, doar aici fiind permisă asocierea conținutului solicitat. În momentul în care datele au fost preluate, socket-ul TCP poate fi închis. Pe fiecare eveniment de tip apăsare a butonului se va crea un fir de execuție dedicat în care se va instanția un obiect de tip ''​Socket''​. În acest sens, se va deschide un socket TCP, prin interogarea serverului disponibil la adresa [[time-b.nist.gov|]],​ pe portul 13, în cadrul unui fir de execuție separat (clasa ''​NISTCommunicationThread''​). Întrucât nu este necesară decât operația de primire a unor date, se va crea doar un obiect de tip ''​BufferedReader'',​ citindu-se două linii (una fiind vidă - așadar ignorată, cealaltă conținând informațiile necesare, care se doresc a fi afișate). Întrucât modificarea conținutului unui control grafic nu poate fi realizată decât din contextul firului de execuție în care a fost creat, acesta va fi obținut prin parametrul metodei ''​post()''​ a obiectului respectiv, doar aici fiind permisă asocierea conținutului solicitat. În momentul în care datele au fost preluate, socket-ul TCP poate fi închis. Pe fiecare eveniment de tip apăsare a butonului se va crea un fir de execuție dedicat în care se va instanția un obiect de tip ''​Socket''​.
Line 557: Line 557:
 </​file>​ </​file>​
  
-{{ :​laboratoare:​laborator06:​single_threaded_server.png?​nolink&​400 }}+{{ :​laboratoare:​laborator06:​02single_threaded_server.png?​nolink&​400 }}
  
 Prin intermediul utilitarului ''​nc''​ (apelat cu adresa Internet și portul serverului) se poate interoga mesajul care a fost transmis. De asemenea, comanda ''​time''​ măsoară timpul în care a fost executată operația respectivă. Prin intermediul utilitarului ''​nc''​ (apelat cu adresa Internet și portul serverului) se poate interoga mesajul care a fost transmis. De asemenea, comanda ''​time''​ măsoară timpul în care a fost executată operația respectivă.
  
 <​code>​ <​code>​
-student@eim2016:​~$ nc 192.168.56.101 ​2015+student@eim2016:​~$ nc 192.168.56.101 ​2016
 Hello, EIM Student! Hello, EIM Student!
-student@eim2016:​~$ time nc 192.168.56.101 ​2015+student@eim2016:​~$ time nc 192.168.56.101 ​2016
 Hello, EIM Student! Hello, EIM Student!
  
Line 677: Line 677:
 </​code>​ </​code>​
  
-**4.** Să se importe în mediul integrat de dezvoltare preferat (Android Studio sau Eclipse ​Luna) proiectul ''​FTPServerWelcomeMessage''​ din directorul ''​labtasks''​.+**4.** Să se importe în mediul integrat de dezvoltare preferat (Android Studio sau Eclipse) proiectul ''​FTPServerWelcomeMessage''​ din directorul ''​labtasks''​.
  
 Se cere să se implementeze o aplicație Android care citește mesajul de întâmpinare transmis în momentul în care se realizează o conexiune către un server FTP.  Se cere să se implementeze o aplicație Android care citește mesajul de întâmpinare transmis în momentul în care se realizează o conexiune către un server FTP. 
Line 685: Line 685:
 În cazul în care mesajul de întâmpinare conține mai multe linii, mesajul este precedat de șirul de caractere ''​220-''​ (reținut în ''​Constants.FTP_MULTILINE_START_CODE''​). Mesajul se încheie fie cu șirul de caractere ''​220'',​ fie cu un șir de caractere precedat de ''​220 ''​ (valori stocate în ''​Constants.FTP_MULTILINE_END_CODE1'',​ respectiv ''​Constants.FTP_MULTILINE_END_CODE2''​). În cazul în care mesajul de întâmpinare conține mai multe linii, mesajul este precedat de șirul de caractere ''​220-''​ (reținut în ''​Constants.FTP_MULTILINE_START_CODE''​). Mesajul se încheie fie cu șirul de caractere ''​220'',​ fie cu un șir de caractere precedat de ''​220 ''​ (valori stocate în ''​Constants.FTP_MULTILINE_END_CODE1'',​ respectiv ''​Constants.FTP_MULTILINE_END_CODE2''​).
  
-{{ :​laboratoare:​laborator06:​ftp_server_welcome_message.png?​nolink&​400 }}+{{ :​laboratoare:​laborator06:​03ftp_server_welcome_message.png?​nolink&​400 }}
  
 Operațiile care trebuie realizate pe metoda ''​doInBackground()''​ a firului de execuție ce gestionează comunicația cu serverul FTP sunt: Operațiile care trebuie realizate pe metoda ''​doInBackground()''​ a firului de execuție ce gestionează comunicația cu serverul FTP sunt:
Line 813: Line 813:
   - clientul dispune de două câmpuri text, prin care se precizează parametrii de conexiune la server (adresa de Internet / portul) precum și un buton prin intermediul căruia se realizează legătura propriu-zisă,​ fiind preluată informația din cadrul canalului de comunicație și afișată corespunzător.   - clientul dispune de două câmpuri text, prin care se precizează parametrii de conexiune la server (adresa de Internet / portul) precum și un buton prin intermediul căruia se realizează legătura propriu-zisă,​ fiind preluată informația din cadrul canalului de comunicație și afișată corespunzător.
  
-{{ :​laboratoare:​laborator06:​client_server_communication01.png?​nolink&​400 }}+{{ :​laboratoare:​laborator06:​04client_server_communication.png?​nolink&​400 }}
  
 **a)** Să se implementeze funcționalitatea serverului. **a)** Să se implementeze funcționalitatea serverului.
Line 847: Line 847:
 Să se folosească clientul pentru a citi, linie cu linie, valorile furnizate de script-ul anterior. Va trebui precizată adresa mașinii fizice (în funcție de configurația folosită) și portul 2016. Să se folosească clientul pentru a citi, linie cu linie, valorile furnizate de script-ul anterior. Va trebui precizată adresa mașinii fizice (în funcție de configurația folosită) și portul 2016.
  
-{{ :​laboratoare:​laborator06:​client_server_communication02.png?​nolink&​400 }}+{{ :​laboratoare:​laborator06:​05client_server_communication.png?​nolink&​400 }}
  
 **7.** Să se importe în mediul integrat de dezvoltare preferat (Android Studio sau Eclipse) proiectul ''​PheasantGame''​ din directorul ''​labtasks''​. **7.** Să se importe în mediul integrat de dezvoltare preferat (Android Studio sau Eclipse) proiectul ''​PheasantGame''​ din directorul ''​labtasks''​.
Line 861: Line 861:
   - altfel, se trimite înapoi cuvântul primit pentru a semnala faptul că există o problemă.   - altfel, se trimite înapoi cuvântul primit pentru a semnala faptul că există o problemă.
  
-{{ :​laboratoare:​laborator06:​pheasant_game.png?​nolink&​400 }}+{{ :​laboratoare:​laborator06:​06pheasant_game.png?​nolink&​400 }}
  
 Astfel, serverul va avea următoarea funcționare:​ Astfel, serverul va avea următoarea funcționare:​
laboratoare/laborator06.1460085974.txt.gz · Last modified: 2017/02/20 20:44 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0