Differences
This shows you the differences between two versions of the page.
| 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: | ||
