This shows you the differences between two versions of the page.
pc:laboratoare:06 [2022/04/06 20:54] vlad_andrei.badoiu [Exercitii] |
pc:laboratoare:06 [2022/04/13 15:06] (current) vlad_andrei.badoiu [Exercitii] |
||
---|---|---|---|
Line 329: | Line 329: | ||
- Clientul va transmite fișierul în calupuri de câte 1024 octeți. | - Clientul va transmite fișierul în calupuri de câte 1024 octeți. | ||
- | La final, vom studia folosind **Wireshark** datagramele trimise de catre client. | + | La final, vom studia folosind **Wireshark** datagramele trimise de catre client. |
+ | |||
+ | Mai mult, daca sunteti in aceasi retea (e.g. pe acelasi WiFi) va puteti **grupa cate doi** pentru a trimite un fisier de la unu la celalalt. Mai exact, unul dintre voi va porni un server cu bind pe INADDR_ANY (0.0.0.0), iar clientul va putea trimite catre ip-ul celuilalt un fisierul. Felicitari, ati facut o **aplicatie simpla de transfer de fisiere**. | ||
**[Task-ul 2]:** | **[Task-ul 2]:** | ||
Line 399: | Line 401: | ||
<note> | <note> | ||
Observatie: Cateodata, cand se incearca sa se reporneasca un _server_, bind() nu reuseste sa asigneze, iar eroarea este "Address already in use". Asta inseamna ca un socket care a fost conectat pe acel port inca mai este agatat si //utilizeaza portul//. In aceasta situatie, fie se poate astepta deconectarea portului respectiv, fie se specifica programatic reutilizarea portului cu [[https://linux.die.net/man/3/setsockopt|setsockopt()]] | Observatie: Cateodata, cand se incearca sa se reporneasca un _server_, bind() nu reuseste sa asigneze, iar eroarea este "Address already in use". Asta inseamna ca un socket care a fost conectat pe acel port inca mai este agatat si //utilizeaza portul//. In aceasta situatie, fie se poate astepta deconectarea portului respectiv, fie se specifica programatic reutilizarea portului cu [[https://linux.die.net/man/3/setsockopt|setsockopt()]] | ||
+ | |||
+ | <code C> | ||
+ | int enable = 1; | ||
+ | if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) < 0) | ||
+ | perror("setsockopt(SO_REUSEADDR) failed"); | ||
+ | </code> | ||
+ | |||
+ | </note> | ||
+ | |||
+ | <note> | ||
+ | O posibila solutie a laboratorului se gaseste [[https://ocw.cs.pub.ro/courses/_media/pc/laboratoare/lab06-rezolvare.zip|aici]] | ||
</note> | </note> |