Differences

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

Link to this comparison view

eim:laboratoare:laborator06 [2019/04/04 14:49]
dragos.niculescu
eim:laboratoare:laborator06 [2022/04/14 12:48] (current)
dragos.niculescu
Line 1: Line 1:
-====== Laborator 06. Comunicația prin Sockeți ​TCP ====== +====== Laborator 06. Comunicația prin Sockeți ​în Android ​====== 
 + 
 ===== Realizarea Conexiunii între o Mașină Fizică și Dispozitivul Mobil ===== ===== Realizarea Conexiunii între o Mașină Fizică și Dispozitivul Mobil =====
  
 Pentru a putea comunica prin intermediul unui socket TCP, o mașină fizică și dispozitivul mobil trebuie să se găsească în aceeași rețea, astfel încât adresele IP ale acestora să fie vizibile între ele. Pentru a putea comunica prin intermediul unui socket TCP, o mașină fizică și dispozitivul mobil trebuie să se găsească în aceeași rețea, astfel încât adresele IP ale acestora să fie vizibile între ele.
 === Comenzi utile === === Comenzi utile ===
-  *  <code shell>ip ro</​code> ​ interfețele,​ adresele, rutele (în telefon sau emulator) +  *  <code shell>vbox86p:/ # ip ro  
-  * <code shell>ip ro</​code> ​ interfețele,​ adresele, rutele (mașina de dezvoltare Linux)+172.16.4.0/​22 dev eth1  proto kernel ​ scope link  src 172.16.7.89  
 +192.168.57.0/​24 dev eth0  proto kernel ​ scope link  src 192.168.57.101  
 +</​code> ​ interfețele,​ adresele, rutele (în telefon sau emulator) 
 +  * <code shell>student@eg106:​~$ ​ip ro 
 +default via 172.16.7.254 dev eno1 proto dhcp metric 100  
 +169.254.0.0/​16 dev eno1 scope link metric 1000  
 +172.16.4.0/​22 dev eno1 proto kernel scope link src 172.16.7.36 metric 100  
 +172.16.101.0/​24 dev vmnet1 proto kernel scope link src 172.16.101.1  
 +192.168.57.0/​24 dev vboxnet1 proto kernel scope link src 192.168.57.1  
 +</​code> ​ interfețele,​ adresele, rutele (mașina de dezvoltare Linux)
   * <code shell>​netstat -rn</​code> ​ interfețele,​ adresele, rutele (mașina de dezvoltare OSX)   * <code shell>​netstat -rn</​code> ​ interfețele,​ adresele, rutele (mașina de dezvoltare OSX)
   * <code shell>​ipconfig</​code> ​ interfețele,​ adresele, rutele (în telefon sau emulator)  ​   * <code shell>​ipconfig</​code> ​ interfețele,​ adresele, rutele (în telefon sau emulator)  ​
Line 24: Line 33:
  
 <​code>​ <​code>​
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices
 List of devices attached List of devices attached
 0019531d59461f ​   device 0019531d59461f ​   device
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ ./adb -s 0019531d59461f shell+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ ./adb -s 0019531d59461f shell
 shell@n7000:/​ $ su shell@n7000:/​ $ su
 su su
Line 38: Line 47:
 <note important>​Pe Linux, în situația în care dispozitivul mobil este detectat, fără a se indica tipul său, este necesar să se pornească serverul de ADB cu drepturi de administrator:​ <note important>​Pe Linux, în situația în care dispozitivul mobil este detectat, fără a se indica tipul său, este necesar să se pornească serverul de ADB cu drepturi de administrator:​
 <​code>​ <​code>​
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices
 List of devices attached List of devices attached
 0019531d59461f ​   ????????????​ 0019531d59461f ​   ????????????​
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ sudo ./adb kill-server +student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ sudo ./adb kill-server 
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ sudo ./adb start-server +student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ sudo ./adb start-server 
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ sudo ./adb devices+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ sudo ./adb devices
 List of devices attached List of devices attached
 0019531d59461f ​   device 0019531d59461f ​   device
Line 58: Line 67:
  
 <​code>​ <​code>​
-student@eim2017:~$ sudo ifconfig usb0+student@eim-lab:~$ sudo ifconfig usb0
 usb0      Link encap:​Ethernet ​ HWaddr 32:​ca:​4b:​1c:​ff:​7b ​ usb0      Link encap:​Ethernet ​ HWaddr 32:​ca:​4b:​1c:​ff:​7b ​
           inet addr:​192.168.42.170 ​ Bcast:​192.168.42.255 ​ Mask:​255.255.255.0           inet addr:​192.168.42.170 ​ Bcast:​192.168.42.255 ​ Mask:​255.255.255.0
Line 106: Line 115:
 Adresa IP care a fost atașată fiecărui dispozitiv virtual Genymotion poate fi verificată:​ Adresa IP care a fost atașată fiecărui dispozitiv virtual Genymotion poate fi verificată:​
   * folosind comanda ''​adb devices'';​ <​code>​   * folosind comanda ''​adb devices'';​ <​code>​
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices
 List of devices attached List of devices attached
 192.168.56.101:​5555 ​    ​device 192.168.56.101:​5555 ​    ​device
Line 115: Line 124:
  
 Conectivitatea dintre mașina de dezvoltare și dispozitivul virtual poate fi verificată folosind comanda ''​ping''​. <​code>​ Conectivitatea dintre mașina de dezvoltare și dispozitivul virtual poate fi verificată folosind comanda ''​ping''​. <​code>​
-student@eim2017:~$ ping 192.168.56.101+student@eim-lab:~$ ping 192.168.56.101
 Pinging 192.168.56.101 with 32 bytes of data: Pinging 192.168.56.101 with 32 bytes of data:
 Reply from 192.168.56.101:​ bytes=32 time<1ms TTL=64 Reply from 192.168.56.101:​ bytes=32 time<1ms TTL=64
Line 140: Line 149:
  
   * prin rularea comenzii ''​adb devices''​ <​code>​   * prin rularea comenzii ''​adb devices''​ <​code>​
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ ./adb devices
 List of devices attached List of devices attached
 emulator-5554 ​  ​device emulator-5554 ​  ​device
Line 146: Line 155:
  
 Conectarea la consola dispozitivului virtual Android se face prin comanda: <​code>​ Conectarea la consola dispozitivului virtual Android se face prin comanda: <​code>​
-student@eim2017:~$ telnet localhost 55nr+student@eim-lab:~$ telnet localhost 55nr
 </​code>​ </​code>​
 specificându-se portul pe care rulează emulatorul. specificându-se portul pe care rulează emulatorul.
Line 167: Line 176:
  
 <​code>​ <​code>​
-student@eim2017:~$ telnet localhost 5554+student@eim-lab:~$ telnet localhost 5554
 Android Console: type '​help'​ for a list of commands Android Console: type '​help'​ for a list of commands
 OK OK
Line 182: Line 191:
 exit exit
 Connection to host lost. Connection to host lost.
-student@eim2017:~$+student@eim-lab:~$
 </​code>​ </​code>​
  
Line 225: Line 234:
 <code java> <code java>
 String hostname = "​localhost";​ String hostname = "​localhost";​
-int port = 2017;+int port = 2000;
 Socket socket = new Socket(hostname,​ port); Socket socket = new Socket(hostname,​ port);
 </​code>​ </​code>​
Line 593: Line 602:
 {{ :​eim:​laboratoare:​laborator06:​02single_threaded_server.png?​nolink&​400 }} {{ :​eim:​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ă. <note important>​Atenție,​ trebuie folosită versiunea nc.traditional,​ varianta nc.openbsd poate avea switch-uri diferite. Folosiți comanda <code shell>ls -l `which ​ns`</​code> ​  +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ă. <note important>​Atenție,​ trebuie folosită versiunea nc.traditional,​ varianta nc.openbsd poate avea switch-uri diferite. Folosiți comanda <code shell>ls -l `which ​nc`</​code> ​  
-</​note>​+</​note> ​pentru a afla varianta folosită implicit. ​
 <​code>​ <​code>​
-student@eim2017:~$ nc 192.168.56.101 2017+student@eim-lab:~$ nc 172.16.7.89 2000
 Hello, EIM Student! Hello, EIM Student!
-student@eim2017:~$ time nc 192.168.56.101 2017+student@eim-lab:~$ time nc 172.16.7.89 2000
 Hello, EIM Student! Hello, EIM Student!
  
Line 725: Line 734:
 Î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''​).
  
-{{ :​eim:​laboratoare:​laborator06:​03ftp_server_welcome_message.png?​nolink&​400 }}+{{ :​eim:​laboratoare:​ex5_ftp_image.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 741: Line 750:
   - închiderea socket-ului.   - închiderea socket-ului.
  
-Să se verifice mesajul afișat în momentul în care se realizează o conexiune la serverul [[ftp.ngc.com|]].+Să se verifice mesajul afișat în momentul în care se realizează o conexiune la serverul [[intranet.ngcaerospace.com/|]].
  
 **5.** Să se importe în mediul integrat de dezvoltare Android Studio proiectul ''​SingleThreadedServer''​ din directorul ''​labtasks''​. **5.** Să se importe în mediul integrat de dezvoltare Android Studio proiectul ''​SingleThreadedServer''​ din directorul ''​labtasks''​.
  
-Acesta reprezintă o aplicație Android care implementează un server ce ascultă pe un port (2017, în ''​Constants.SERVER_PORT''​) solicitări de conexiune provenite de la clienți.+Acesta reprezintă o aplicație Android care implementează un server ce ascultă pe un port (2000, în ''​Constants.SERVER_PORT''​) solicitări de conexiune provenite de la clienți.
  
 Pe același fir de execuție pe care se face așteptarea,​ este realizată și transmiterea mesajului către client, preluat dintr-un câmp text. Pe același fir de execuție pe care se face așteptarea,​ este realizată și transmiterea mesajului către client, preluat dintr-un câmp text.
Line 760: Line 769:
  
 <​code>​ <​code>​
-student@eim2017:~$ nc 192.168.56.101 2017+student@eim-lab:~$ nc 172.16.7.89 2000
 Hello, EIM Student! Hello, EIM Student!
-student@eim2017:~$ time nc 192.168.56.101 2017+student@eim-lab:~$ time nc 172.16.7.89 2000
 Hello, EIM Student! Hello, EIM Student!
  
Line 787: Line 796:
  
 <​code>​ <​code>​
-C:​\Users\Student>​ telnet 192.168.56.101 ​2017+C:​\Users\Student>​ telnet 192.168.56.101 ​2000
 Start Server Start Server
  
 Connection to host lost. Connection to host lost.
-C:​\Users\Student>​ telnet 192.168.56.101 ​2017 +C:​\Users\Student>​ telnet 192.168.56.101 ​2000 
-Connecting To 192.168.56.101...Could not open connection to the host, on port 2017: Connect failed+Connecting To 192.168.56.101...Could not open connection to the host, on port 2000: Connect failed
 </​code>​ </​code>​
  
Line 877: Line 886:
 <note important>​Accesul la controalele grafice trebuie să fie realizat numai din contextul firului de execuție asociat interfeței cu utilizatorul.</​note>​ <note important>​Accesul la controalele grafice trebuie să fie realizat numai din contextul firului de execuție asociat interfeței cu utilizatorul.</​note>​
  
-**c)** Să se pornească serverul (se introduce textul //Start Server//). În client, să se verifice valoarea furnizată în cazul în care se introduc valorile ''​127.0.0.1''​ / ''​2017'',​ respectiv ''​localhost''​ / ''​2017''​. ​+**c)** Să se pornească serverul (se introduce textul //Start Server//). În client, să se verifice valoarea furnizată în cazul în care se introduc valorile ''​127.0.0.1''​ / ''​2000'',​ respectiv ''​localhost''​ / ''​2000''​. ​
  
 Să se oprească serverul (se introduce textul //Stop Server//). Să se verifice ce valori sunt furnizate în această situație. Să se oprească serverul (se introduce textul //Stop Server//). Să se verifice ce valori sunt furnizate în această situație.
  
-**d)** (doar Linux) Să se creeze o listă cu procesele care rulează la momentul curent, textul putând fi obținut, linie cu linie, prin intermediul unei conexiuni pe portul ​2017, serverul fiind astfel simulat pe mașina fizică.+**d)** (doar Linux) Să se creeze o listă cu procesele care rulează la momentul curent, textul putând fi obținut, linie cu linie, prin intermediul unei conexiuni pe portul ​2000, serverul fiind astfel simulat pe mașina fizică.
  
 <​code>​ <​code>​
-student@eim:​~$ ps a | while read x; do echo "​$x"​ | nc -l 2017; done+student@eim:​~$ ps a | while read x; do echo "​$x"​ | nc -l 2000; done
 </​code>​ </​code>​
  
 <note tip>Pe mașinile Debian, comanda ''​nc''​ se rulează cu opțiunea suplimentară ''​-p''​ pentru a se indica portul pe care se dorește ca acesta să accepte invocările.</​note>​ <note tip>Pe mașinile Debian, comanda ''​nc''​ se rulează cu opțiunea suplimentară ''​-p''​ pentru a se indica portul pe care se dorește ca acesta să accepte invocările.</​note>​
  
-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 ​2017.+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 ​2000
  
 {{ :​eim:​laboratoare:​laborator06:​05client_server_communication.png?​nolink&​400 }} {{ :​eim:​laboratoare:​laborator06:​05client_server_communication.png?​nolink&​400 }}
eim/laboratoare/laborator06.1554378598.txt.gz · Last modified: 2019/04/04 14:49 by dragos.niculescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0