This shows you the differences between two versions of the page.
eim:laboratoare:laborator06 [2019/04/04 14:52] 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 596: | Line 605: | ||
</note> pentru a afla varianta folosită implicit. | </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 }} |