Lucrarea de laborator nr. P0
Enunturi
Problema 1
Se cere un program client care sa se conecteze la o adresa specificata
de catre utilizator (adresa IP si numarul de port). Dupa conectare,
programul va permite utilizatorului sa introduca de la tastatura comenzi
care vor fi trimise serverului. Raspunsurile de la server vor fi afisate pe
ecran. De asemenea, intreaga comunicatie se va inregistra intr-un fisier. In
plus, programul va afisa un mesaj in momentul conectarii, sau un mesaj de
eroare in caz de esec.
Programul trebuie sa permita trimiterea consecutiva a oricate mesaje catre
server, chiar daca in acest timp nu vine nici un raspuns de la server.
Bonificatii:
- transmiterea de comenzi binare si afisarea raspunsurilor
binare
- posibilitatea specificarii serverului prin nume in loc de adresa IP
Problema 2
Se cere un program server care asteapta conexiuni pe un port specificat
de catre utilizator.
Dupa conectare,
programul va permite utilizatorului sa introduca de la tastatura mesaje
care vor fi trimise clientului. Mesajele de la client vor fi afisate pe
ecran. De asemenea, intreaga comunicatie se va inregistra intr-un fisier. In
plus, programul va afisa in momentul conectarii adresa IP si numarul
portului de pe care s-a conectat clientul.
Programul trebuie sa permita trimiterea consecutiva a oricate mesaje catre
client, chiar daca in acest timp nu vine nici un mesaj de la client.
Bonificatii:
- transmiterea si afisarea mesajelor
binare
- tratarea simultana a mai multor clienti
Cerinte
- Fiecare student va rezolva la alegere una din cele doua probleme
- Problemele se vor rezolva in C++ atat pe Linux cat si pe Windows
- Se va prezenta textul sursa, care trebuie sa fie inteligibil
Indicatii
- Pe windows functiile se gasesc in biblioteca Winsock (header
winsock.h)
- Intrucat programul nu are de unde sa stie daca urmatorul mesaj va veni
de la utilizator pentru a fi trimis spre partener, sau de la partener spre a
fi afisat, programul nu trebuie sa se blocheze in asteptarea unui mesaj
dintr-una din parti. Exista trei metode:
- atat socketul cat si intrarea standard se fac neblocante (vezi
fcntl(), O_NDELAY), si programul va face polling
- se foloseste functia select() pentru a vedea pe care din cele doua
intrari se gaseste un mesaj
- se fac doua thread-uri sau doua procese, unul se ocupa de citit de
la tastatura si trimis pe socket, celalalt citeste de pe socket si afiseaza
pe ecran (recomandat fork() sau pthread in Linux, respectiv
AfxBeginThread() sau clasa CThread).
Retele de calculatoare
2 Oct 2003
Radu-Lucian LUPSA