Lucrarea de laborator nr. 2
Program concurent cu socket()
Se cer doua programe, un client si un server, pentru o aplicatie de tip chat.
Aplicatia se va scrie in C/C++ si va respecta cerintele:
- Serverul va astepta conectarea clientilor pe un port TCP configurabil.
- Fiecare client poate trimite serverului mesaje de tip string. Fiecare
mesaj va fi transmis pe conexiune ca un intreg pe 2 octeti in ordine retea
reprezentand lungimea mesajului urmat de sirul de caractere propriu-zis ce
reprezinta mesajul. Mesajul propriu-zis nu va avea terminator nul si nu este
permis sa contina caractere de control altele decat caracterul
line feed (10); serverul va ignora orice mesaj ce contine caractere
nepermise.
- La terminarea activitatii, clientul inchide conexiunea fara vreo alta
semnalizare catre server.
- Serverul asociaza fiecarui client un numar natural. Primul client
conectat va primi numarul 1, al doilea numarul 2 si asa mai departe. Daca un
client inchide conexiunea, numarul asociat nu se va refolosi.
- La primirea unui mesaj de la oricare dintre clienti, serverul va
transmite mesajul tuturor clientilor conectati in acel moment (inclusiv
clientul de la care a provenit mesajul).
- Mesajele dinspre server spre client vor avea urmatorul format:
- un intreg pe 4 octeti in ordine retea reprezentand numarul asociat
clientului care a produs mesajul,
- un intreg pe 2 octeti in ordine retea reprezentand lungimea
mesajului,
- un sir de octeti reprezentand mesajul propriu-zis si satisfacand
aceleasi cerinte ca si mesajele de la client spre server.
- Daca un client se blocheaza (de exemplu trimite doar lungimea
mesajului dupa care nu mai trimite mesajul propriu-zis, sau nu citeste
mesajele primite de la server) nu este permis ca serverul sa nu-si mai
serveasca vreunul din ceilalti clienti. Este permis ca un client ce nu-si
citeste mesajele dinspre server sa fie deconectat de catre server la
acumularea a 128KiB de date necitite.
- Toti clientii trebuie sa primeasca mesajele de la server in aceeasi
ordine.
- Clientii vor citi mesajele de trimis spre server fie de la tastatura
fie dintr-un fisier. Mesajele sosite de la server vor fi scrise si pe ecran
si intr-un fisier.
Retele de calculatoare
Actualizat: 2007-03-26