Retele de calculatoare - Proiecte propuse
NetSimsS (A)
Creati un simulator al unei retele de calculatoare, care permite studierea comportamentului retelei si al schemelor de control ale aglomerarii traficului in retea. Simulatorul trebuie sa permita configurarea diversilor parametri implicati de schemele de control ale fluxului si congestiei, conform cu specificatii existente in vigoare (ex. RFC 5681), si de asemeni parametri privind topologia retelei si care sa permita simularea a diverse incarcari ale retelei. Simulatorul trebuie sa fie capabil sa trateze cereri de simulare concurente de la mai multi clienti.
NetSimsC (A)
Construiti o interfata grafica pentru NetSimsS. Clientul va putea configura intr-un mod vizual atractiv topologia si parametrii retelei simulate. De asemeni va permite salvarea unui scenariu de simulare si re-rularea acestuia (cu posibilitatea modificarii de parametri).
SFTPFileSystem (A)
Sa se scrie o aplicatie care permite montarea locala a unui sistem de fisiere exportat de un server SFTP aflat pe alta masina.
YourOwnNFS (A)
Sa se scrie o aplicatie care permite montarea locala a unui sistem de fisiere exportat de un server propriu.
CollaborativeNotepad (A)
Sa se realizeze o aplicatie client/server ce permite editarea simultana a fisierelor text. Un fisier va putea fi editat in acelasi timp de maxim doi clienti. Serverul va permite insa mai multe astfel de sesiuni concurente de editare pe documente diferite (ex. 2 perechi de cate 2 clienti pe 2 documente). Serverul va stoca fisierele, punand la dispozitia clientilor operatiile de creare si download. Aplicatia va trebui sa implementeze un protocol de comunicare pentru operarea concurenta asupra fisierelor. Se va avea in vedere consistenta documentului editat la modificari simultane asupra unei parti comune (ex. plasarea cursorului celor doi clienti cand unul scrie si celalalt sterge in aceeasi pozitie).
Froxy (A)
Sa se implementeze o aplicatie 'proxy' pentru protocolul FTP. Aplicatia va include atat o componenta server (proxy-ul in sine) cat si o componenta client. Serverul (proxy-ul) va juca rol de client FTP pentru un alt server FTP de la care va prelua si stoca temporar fisiere. Dimensiunea maxima si tipurile fisierelor stocate temporar de acest proxy se vor specifica intr-un fisier de configurare. Acest fisier va mai contine si o lista de situri interzise, pe baza unor politici de interzicere a accesului la ele (e.g., interzicerea accesului la siturile FTP din domeniul .uaic.ro intre orele 08-20, in zilele de luni-vineri, pentru clienti provenind din domeniul .y.ro). Componenta client ofera unui utilizator obisnuit posibilitatea de download a fisierelor stocate pe proxy si in plus, unui administrator, posibilitatea de a modifica fisierul de configurare.
NetDiag (A)
Sa se realizeze o aplicatie care sa afiseze toate adresele IP ale routerelor intermediare (hop-uri) prin care trec pachetele pana la o adresa destinatie (realizeaza un trace). Pentru efectuarea trace-ului se vor folosi socketuri raw. In dreptul fiecarui hop va fi scris timpul de raspuns, care va fi actualizat periodic. De asemenea, daca in timp ce se realizeaza trace-ul un hop nu mai raspunde, sa se semnaleaza acest lucru. Aplicatia va include o componenta server si una client. Serverul efectueaza operatiile de mai sus, iar clientul are posibilitatea de a programa serverul cu diversi parametri - configurarea unei rute, re-afisarea rutei la un anumit timp, etc. (Hint: functionalitate similara comenzii mtr)
MirrorFTP (A)
Sa se implementeze o aplicatie care realizeaza copii ale siturilor FTP. Aplicatia va include atat o componenta server cat si o componenta client. Serverul va juca rol de client FTP pentru serverele de unde va face copiile. Se va da posibilitatea programarii actiunilor de copiere sau improspatare (refresh). Aceasta programare se va face prin intermediul clientului. Actiunea de refresh nu va face noi copii decat pentru fisierele modificate. Clientul va putea sa configureze si locatia exacta unde se stocheaza copia pentru fiecare site si de asemeni sa faca si download la fisierele copiate.
Part2Part (A)
Sa se conceapa o aplicatie de tipul peer-to-peer pentru partajarea fisierelor. Programele vor folosi socket-uri pentru comunicatie, putind fi rulate pe masini diferite astfel: programul client poate fi rulat de catre orice utilizator, iar programul server poate fi rulat doar de autor, care este si responsabil cu pornirea/oprirea serviciului. Programul server trebuie sa fie capabil sa serveasca simultan mai multe cereri de transfer provenite de la "colegii" sai din retea. Fisierele dorite vor putea fi cautate - eventual folosind expresii regulate - conform unor criterii (nume, tip, lungime etc.) in cadrul "retelei".
Chordy (A)
O tabela hash distribuita (DHT) functioneaza prin asignarea de chei la noduri diferite dintr-un sistem distribuit. Un nod va stoca valorile corespunzatoare cheii care i se asigneaza. Una din aplicatiile DHT-urilor sunt sistemele peer-to-peer pentru partajare de fisiere (ex.: BitTorrent). Exista diverse scheme/algorithmi pentru organizarea de DHT-uri (asignare chei in sistemul peer-to-peer, gasire chei in sistemul peer-to-peer, etc). Un astfel de design pentru un DHT este Chord. Se va consulta descrierea Chord disponibila online ( http://en.wikipedia.org/wiki/Chord_(peer-to-peer) ) si se va implementa un sistem peer-to-peer corespunzator care va oferi functionalitatea de a stoca perechi cheie-valoare. Optional proiectul se poate realiza in colaborare si combina cu functionalitatea proiectului Part2Part.
Poshet (A)
Sa se dezvolte un client, avind o interfata grafica atractiva, pentru serviciul standard POP3, inclusiv cu suport pentru mesaje cu fisiere atasate conform standardului MIME. Clientul va oferi minimal operatiile comune intalnite intr-un client de e-mail: send, forward, reply si posibilitatea de organizare a e-mailurilor primite.
STester (A)
Sa se realizeze o aplicatie pentru testarea (semi)automata a serverelor. Se da posibilitatea specificarii unei suite de teste care sa poata fi aplicata serverelor. Se vor considera minimal ca tipuri de servere testate: un server FTP, un server HTTP, un server ce ofera alt serviciu la alegere. Se vor considera ca teste: masurarea latentei pentru comunicarea cu un server si teste specifice serviciului oferit de server (ex. creare director si upload fisiere, posibilitatea de download a unei pagini web, etc). Dupa testarea unui server se va afisa pentru fiecare test daca s-a incheiat cu succes si se va genera un fisier de jurnalizare cu detalii referitoare la actiunile realizare astfel incat sa se poate depista cu usurinta cauza erorilor. Aplicatia de testare va functiona la randul ei ca un server si testarile vor putea fi configurate prin intermediul unui client.
ReadsProfiler (A)
Sa se realizeze o aplicatie client-server prin care se ofere acces la o librarie online. Cartile vor putea fi cautate dupa criterii diverse (gen, autor, titlu, anul aparitiei, ISBN, rating) si descarcate de catre client. Va exista o ierarhie de genuri si subgenuri, iar fiecare carte va apartine unui sau mai multor genuri/subgenuri din aceasta. Totodata, un autor va avea specificat genurile pe care le abordeaza in operele sale. Serverul va tine evidenta cautarilor si a rezultatelor accesate de un client pentru o anumita cautare, precum si a descarcarilor realizate de catre acesta. Pe baza tuturor acestor informatii (genurile in care se incadreaza o carte, genurile abordate de un anumit autor, rating-ul cartii, cautarile si descarcarile unui utilizator), serverul va fi capabil sa ofere recomandari de carti clientului. Pe masura ce activitatea clientilor creste, sistemul de recomandari se va putea imbunatati in acuratete, luand in considerare factori precum gusturile unui utilizator, preferintele altor utilizatori cu gusturi similare, rating-ul pe care l-au primit cartile de la clientii carora le-au fost recomandate.
VirtualSoc (A)
Sa se realizeze o aplicatie client/server ce va simula functionalitatea unei retele sociale. Sistemul ofera urmatoarele: inregistrarea utilizatorilor (diferite tipuri de utilizatori: obisnuiti, administratori). Utilizatorii isi pot seta profilul si postruile ca fiind publice sau private. Utilizatorii pot vizualiza postarile publice ale celorlalti utilizatori fara sa fie autentificati.Toate celelalte comenzi vor fi restrictionate de autentificare. Sistemul va suporta minim urmatoarele operatii: adaugarea unui prieten in lista de prieteni(specificarea tipului de prieten: apropiat, cunostiinta, etc.), postarea unei stiri (stirea va putea fi: trimisa unui grup special: prieteni apropiati, prieteni sau poate fi publica). Sistemul permite un mecanism de comunicare privata intre 2 sau mai multe persoane.
CacheOpt (A)
Sa se implementeze o aplicatie care ofera o modalitate optima de a furniza raspuns clientilor (e.g. se va implementa un mecanism de cache care va mentine raspunsuri la cererile care au consumat cel mai mult timp). Se va face si implementarea aspectelor care tin de consistenta datelor din cache. Serverul pune la dispozitia clientilor un API care permite cel putin 4 servicii (exemplu: un serviciu realizeaza transformarea unui fisier dintr-un format in alt format in functie de preferintele utilizatorului, de exemplu ps to pdf; un serviciu creaza un mecanism de history per client pe care il pune la cerere la dispozitia clientului, etc.). Daca sistemul identifica pe baza mecanismului de history ca exista utilizatori care au cerut servicii identice in interval de maxim 2 minute, se va crea automat un mecanism de notificare a acestora si ei vor avea posibilitatea de a comunica in timp real.
LearNet (A)
Realizati un sistem cu arhitectura client/server care sa ajute la invatarea principalelor notiuni de Retele de calculatoare. Pe server se va face managementul tuturor informatiilor. Clientul, avand o interfata grafica atractiva va permite: cautarea de informatii, discutii cu alti utilizatori pe o anumita tematica, salvarea si clasificarea acestor discutii. O parte din utilizatori vor putea fi grupati intr-o lista de prieteni.
mySVN (A)
Sa se realizeze o aplicatie de tipul revision control. Aplicatia va avea cel putin urmatoarele functionalitati: inregistrarea utilizatorilor in sistem (utilizatorii pot avea diferite drepturi aspura repository-ului), logarea unui utilizator. Daca utilizatorul este logat el va putea realiza operatiuni de tipul: descarcarea surselor aflate in repository, adaugarea, stergerea de fisiere, operatiunea de commit a unor modificari, operatiunea de revert(pe server se vor pastra fisiere de loguri ce vor descrie diferentele intre versiunile unui fisier). Bonus: crearea unei interfete grafice pentru loguri in care commiturile, modificarile fata de versiunea anterioara sa poate fi vizalizate.
https://subversion.apache.org/docs/
https://tortoisesvn.net/
mySCDN (A)
Sa se proiecteze si sa se implementeze un sistem de tip CDN. Sistemul va include o retea de minim 5 noduri care vor functiona in modelul client/server pentru a oferi acces la un serviciu sau pentru a distribui date (generate de unul din noduri) unor clienti finali. Nodurile respective vor implementa minimal urmatoarele tehnologii specifice CDN: caching - datele vor fi retinute temporar pe anumite noduri pentru un acces mai rapid de la clientii conectati, load balancing - anumiti clienti ai unui nod pot fi redistribuiti catre un alt nod in caz de supraincarcare, rutarea cererilor - daca unul din noduri nu poate furniza o informatie ceruta va ruta cererea mai departe intr-un mod optimizat (nu broadcast ci pe baza unui set de informatii mentinute relativ la informatia de pe celelalte noduri). Se recomanda analiza atenta a informatiilor privind o arhitectura CDN din linkul disponibil ca resurse suplimentare.
myDNS (A)
Sa se proiecteze si sa se implementeze un prototip pentru un sistem DNS propriu. Se va folosi obligatoriu in implementare modelul server-client si se vor lua in calcul diverse aspecte de optimizare oferite de protocolul DNS obisnuit (ex. ierarhizarea domeniilor, caching pentru raspunsuri, etc.).
MySSH (A)
Sa se implementeze o pereche client/server capabila de autentificare si comunicare encriptate. Server-ul va executa comenzile de la client, si va returna output-ul lor clientului. Comenzile sunt executabile din path, cu oricat de multe argumente; cd si pwd vor functiona normal. Se pot executa comenzi multiple legate intre ele sau redirectate prin: |. <, >, 2>, &&, ||, ;.
GridAdmin (A)
Sa se dezvolte o aplicatie care va permite administrarea unei retele de calculatoare. IP-urile statiilor din retea vor fi salvate intr-un fisier text iar aplicatia va permite executia unor comenzi pe toate pc-urile din lista. Pe toate statiile din lista se presupune ca exista instalat openssh-server si este inregistrat un administrator unic (user:admin, parola:adminpass). Lista de comenzi minime: interogarea starii pc-urilor (pornit/oprit), pornirea (wol), oprirea (shutdown), executia unor comenzi bash (cu sau fara confirmarea executiei).
NewsCast (A)
Sa se implementeze o retea de distributie a stirilor peer-to-peer organizata in felul urmator. Un nod va simula 5 statii de distributie. Fiecare statie va rula ca o pereche separata de threaduri server-client, unde fiecare thread server ruleaza pe un port diferit si va trata clientii in mod concurent la randul sau in mod multithreaded. La initializare fiecare statie va avea la dispozitie adresele a 3 alte statii. Intr-o retea de N astfel de statii (unde N va fi minim 15 deci 3 noduri), K statii fixate emit periodic la un interval stabilit cate o stire (mesaj text). Stirile vor fi diseminate in reteaua de distributie printr-un protocol de tip gossip in variante diferite (push si pull), marcand statiile care au aflat stirea, folosind UDP. La un alt interval de timp periodic 3 statii (perechi de threaduri server-client) se vor inchide si vor reporni. Se va implementa un nod separat de monitorizare conectat la toate celelalte noduri care va centraliza timpul in care o stire a fost diseminata de la lansare pana la acoperirea intregii retele, diferenta de timp intre o diseminare folosind varianta push si varianta pull, rata de pierdere a mesajelor (daca exista). Se vor rula teste pentru K variat de la 1 la 3 pentru fiecare varianta de gossip (push/pull) si se vor centraliza rezultatele in cadrul documentatiei proiectului.
SpaceChat (A)
Pentru distante interplanetare, cu separari temporale de cel putin zeci de minute, sunt necesare schimbari in protocoalele si paradigmele pe care le folosim. Folosind uneltele teoretice si practice puse la dispozitie la www.nasa.gov (link 1, link 2, link 3), realizati o aplicatie client/server concurent ce permite schimbul de mesaje text la distante interplanetare si demonstrati functionalitatea folosind unul dintre scenariile propuse de NASA (accesibile in imaginea .iso de pe pagina sus-amintita).
RemMux (A)
Implementati un client/server(concurent) ce permite executia de comenzi la distanta - similar cu SecureSHell, insa fara cerinte de encriptie. Clientul va rula intr-un terminal, si va putea deschide ferestre multiple, afisate vizual simultan - similar cu Tmux. Sugestie: folositi bibliotecile curses/ncurses.
Drag'n'drop processes (A)
Implementati o pereche client/server(concurent) ce realizeaza urmatoarele operatiuni: clientul, folosind o interfata grafica, permite proiectarea (prin desen pe un canvas sau prin drag-and-drop de elemente dintr-un toolbar) unui workflow de procese, ce isi trimit input/output. De exemplu: primul nod executa `cat in.txt`; o sageata catre al doilea nod (ce contine `grep pattern`) trimite rezultatul lui `cat` spre filtrare, etc. . Aceasta arhitectura este comunicata de catre client unui server ce ruleaza procesele specificate, si returneaza rezultatul executiei.
Monitorizarea traficului (A) [Propunere Continental]
Descriere: Implementati un sistem care va fi capabil sa gestioneze traficul si sa ofere informatii virtuale soferilor. Soferii vor putea de asemenea sa raporteze incidente din trafic spre sistem. Apoi aceste update-uri vor fi trimise catre toti participantii la trafic. Fiecare masina va trimite automat catre sistem informatii despre viteza cu care circula. Apoi, sistemul va notifica fiecare sofer despre anumite restrictii de viteza ( eventual datorita unui blocaj in trafic) De asemenea, fiecare sofer va putea sa se inscrie sa primeasca informatii despre vreme, evenimente sportive, preturi pentru combustibili la statiile peco.
Actori: Un sistem server ce asteapta conexiuni. Mai multe conexiuni din partea de client.
- Activitati:
- trimite informatii dinspre server catre toti clientii despre : viteza cu care trebuie sa circule pe bucata respectiva de drum
- trimite informatii dinspre server despre vreme, evenimente sportive, preturi pentru combustibili la statiile peco doar celor care au selectat aceste optiuni
- un client anunta un accident pe Strada Lapusneanu 73, serverul inregistreaza mesajul, il trimite inapoi catre toti clientii
- toti clientii vor trimite viteza cu care circula in acel moment ( cu o frecventa de 1 min se va face update la informatie )
Mersul trenurilor (A) [Propunere Continental]
Sa se implementeze un server ce ofera sau actualizeaza informatii in timp real de la toti clientii inregistrati pentru: mersul trenurilor, status plecari, status sosiri, intarzieri si estimare sosire. Serverul citeste datele din fisiere xml si actualizeaza datele(intarzieri si estimare sosire) la cererea clientilor (signal - receive) Toata logica va fi realizata in server, clientul doar cere informatii despre plecari/sosiri si trimite informatii la server despre posible intarzieri si estimare sosire.
- Activitati:
- trimitere de la server a informatiilor despre mersul trenurilor in ziua respectiva
- trimitere de la server a informatiilor despre plecari in urmatoarea ora (conform cu planul , in intarziere cu x min) doar la cererea unui client
- trimitere de la server a informatiilor despre sosiri in urmatoarea ora (conform cu planul , in intarziere cu x min, cu x min mai devreme) doar la cererea unui client
NetworkDevicesMonitor (A) [Propunere Orange]
Implementati o platforma de monitorizare a operatiunilor de retea si a incidentelor de securitate. Sa se realizeze o solutie ce afiseaza centralizat, intr-un dashboard, metrici si statistici generate din log-urile colectate din echipamente de retea, endpoints si servere. Platforma va fi multiuser, multithreaded, cu un dashboard configurabl, capabila sa colecteze nativ syslog, modulara – cu posibilitatea de a adauga surse de date, agenti si filtre. Implementarea presupune configurarea unei infrastructuri fizice sau virtuale cu echipamente active si/sau endpoints, pe care pentru testare se va putea instala software third party (agenti).
NetMap (A) [Propunere Orange]
Sa se realizeze o aplicatie pentru vizualizarea dinamica a unor topologii de retea (VNFs), pretabila in medii virtualizate. Se descopera diferite VMs (pe baza de adrese IP), se interogheza masinile, minim 3 (orice metoda), se colecteaza informatiile in baza de date si se expun detaliile referitoare la masini (nume; caracteristici: CPU, RAM, interfete, stare, load, etc), prin orice varianta, cu posibilitatea unui istoric. Pe baza informatiilor colectate se realizeaza si o harta (e.g. web map) in care sunt vizualizate masinile, legaturile intre ele (interfete, links), precum si diferite caracterisitici. Harta este dinamica, se face refresh la un intervat T de 5 minute, iar o adaugare sau stergere de VM sau link se va putea observa la urmatoarea secventa t0+T.
IoTNetworkManager (A)
Dezvoltati o aplicație ce simuleaza gestionarea dispozitivelor IoT într-o rețea. Aplicația va permite utilizatorilor să monitorizeze și să controleze dispozitive IoT simulate, incluzand functionalitati de configurare a setărilor de rețea, actualizare a firmware-ului si analiza datelor generate de dispozitive. Aplicația ar trebui, de asemenea, să includă elemente de securitate a rețelei și a dispozitivelor conectate în acest mediu simulat.
Personal Cloud Storage (A)
Implementați o soluție de stocare în cloud personală și sigură, care permite utilizatorilor să stocheze, să acceseze și să partajeze fișiere între dispozitivele lor, de oriunde s-ar afla. Acest proiect va include aspecte precum criptarea datelor, redundanța pentru prevenirea pierderii de date și o interfață ușor de utilizat.
VirtualStudyGroup (A)
Creați un sistem de studiu virtual care permite studenților să colaboreze la proiecte, să partajeze materiale și să discute în timp real, folosind o arhitectură adecvata. Se va dezvolta un client care sa poată oferi suport pentru o interacțiune fluidă a utilizatorului final cu sistemul dezvoltat.
RemoteLearningPlatform (A)
Dezvoltați o platformă de învățare la distanță care oferă cursuri online, materiale didactice interactive și posibilitatea de a susține examene și teste online. Clientul va oferi, printr-o interfata grafica, suport pentru o interacțiune fluidă a utilizatorului final cu sistemul dezvoltat.
Family Locator and Safety Network (A)
Creați o aplicație care ajută membrii unei familii să-și urmărească reciproc locațiile în timp real și să ofere alerte de siguranță. Aplicația va include funcții precum zone sigure definite, notificări atunci când membrii familiei ajung sau pleacă de la anumite locații și un buton de urgență pentru alerte rapide. Acest proiect va pune la dispoziție și o interfata grafica ușor de utilizat.
AdaptiveRateLimiter (A)
Dezvoltați un proxy (server intermediar) care implementeaza un algoritm adaptiv de limitare a numarului de cereri (“rate limiting”) destinate unui alt server ce ofera servicii (in cadrul acestuia se vor dezvolta doua functionalitati, la alegere, pentru care se pot transmite cereri si care au timpi de executie diferiti). Acest proxy va accepta cereri doar din partea utilizatorilor inregistrati, pe baza unei chei de acces. Proxy-ul va ajusta automat rata cererilor pe baza activitatii clientilor si a incarcarii serverului de servicii. Fiecarui utilizator ii va putea fi stabilita, particular, o rata minima garantata de cereri. Serverul de servicii va comunica in permanenta cu proxy-ul, transmitandu-i informatii privind incarcarea. Clientul va permite, prin intermediul unei comenzi, transmiterea in mod automat a unui volum mare de cereri, intr-o perioada de timp specificata. De asemenea, proxy-ul va implementa si un mecanism de “load balancing”.
KeyValueStore (A)
Implementați un Key-Value Store distribuit, care funcționează similar unui cache distribuit (ex. Redis), oferind acces rapid și sincronizat la date partajate între mai multe servere. Acest sistem trebuie să fie capabil să stocheze date în memorie, să le stocheze în mod persistent la nevoie și să gestioneze notificări pentru clienți. Sistemul trebuie să sincronizeze datele între mai multe servere participante (minim 2) pentru a asigura consistența. Operațiile efectuate asupra unei resurse (adăugare, actualizare, ștergere) pe un server trebuie propagate automat la toate celelalte servere. Datele trebuie stocate inițial în memorie pentru acces rapid. Dacă dimensiunea totală a datelor depășește o limită configurabilă, acestea trebuie scrise pe disc. Sistemul trebuie să gestioneze consistența datelor între stocarea în memorie și cea de pe disc. Fiecare resursă adăugată în Key-Value Store trebuie să aibă un timp de expirare, configurabil la momentul adăugării. Resursele expirate trebuie eliminate automat. Clienții trebuie să poată fi notificați în timp real atunci când o resursă este actualizată și când o resursă este eliminată (manual sau la expirare). Serverul trebuie să ofere clientului suport pentru efectuarea de operațiuni multiple într-o singura tranzacție atomică (de ex., pentru 2 operații consecutive, ștergere și apoi adăugare, dacă prima operație este cu succes, iar a doua operație nu se execută cu succes, sistemul trebuie să poată reveni la starea inițială de dinaintea primei operații).
My2FA (B)
Dezvoltati o aplicatie de tip client/server, care oferă gestionarea codurilor si notificarilor de tip 2FA (two-factor authentication) pentru o lista predefinita de aplicații. In cadrul serverului, codurile 2FA vor fi regenerate recurent pentru fiecare aplicatie si vor putea fi aratate la cererea clientului dezvoltat pentru aceasta aplicatie. In momentul in care serverul 2FA primeste o notificare de autentificare pentru una din aplicatiile pe care le are in gestiune, acesta il va notifica pe clientul 2FA mai departe si ii va cere aprobarea sau respingerea acesteia. Pentru a valida functionalitatea aplicatiei 2FA, un client si un server aditional vor fi dezvoltate. Serverul aditional va juca rolul aplicatiei unde utilizatorul incearca sa se autentifice prin intermediul clientului aditional. In momentul in care clientul initializeaza o cerere de autentificare la serverul aditional prin intermediul clientului aditional, i se vor prezenta doua optiuni: trimiterea unei notificari in aplicatia de 2FA pentru a confirma identitatea sau introducerea unui cod din aplicatia de 2FA. In cazul notificarii, daca se primeste un raspuns pozitiv de la serverul 2FA, autentificarea in aplicatia aditionala va functiona, altfel va esua. In cazul utilizarii mecanismului bazat pe coduri, codul introdus de utilizator in clientul aditional, va fi preluat de serverul aditional si verificat cu serverul de 2FA, pentru a decide daca autentificarea s-a realizat cu succes. Bonus: mecanism de stocare criptat, interogari criptate.
PublicMobilityAdvisor (B)
Dezvoltati un sistem bazat pe arhitectura client/server, ce furnizeaza informatii de interes in ceea ce priveste transportul public. In cazul mijloacelor de transport (autobuze, tramvaie etc.) serverul receptioneaza de la acestea informatiile la diferite intervale de timp, cat mai aproape de real-time (e.g. numar de identificare, viteza, orientare, pozitie, grad de ocupare, capabilitati pentru persoanele cu dizabilitati). In cazul calatorilor serverul va primi pozitia acestora, destinatia dorita si va folosi datele stranse anterior pentru a recomanda/estima cel mai apropiat mijloc de transport care se intersecteaza cu pozitia persoanei. Utilizatorii vor putea specifica, pe langa pozitie, si daca au nevoie de asistenta in momentul in care autovehiculul ajunge la acestia; daca se specifica acest lucru, soferul mijlocului de transport trebuie sa fie notificat/atentionat de catre server. Serverul va oferi serviciile la porturi diferite, in functie de tipul clientului. Bonus: dezvoltarea/integrarea unei harti 2D.
DevSync (B)
Sa se realizeze o aplicatie de sincronizare a informatiilor pe dispozitive multiple (minim 3) ale unui utilizator. Se va avea in vedere ca permanent informatia sa fie aceeasi pe cele 3 dispozitive. Sistemul va permite monitorizarea permanenta a dispozitivelor si a starilor intermediare in care se gasesc diferitele resurse per fiecare dispozitiv. Sistemul va avea o arhitectura P2P.
NotyHelper (B)
Sa se realizeze o aplicatie client/server de notificare, care permite autentificarea de pe dispozitive multiple ale utilizatorului. Sistemul de trimitere a mesajelor este unul parametrizabil (e.g. utilizatorul poate seta momentul declansarii alertei pentru actiuni predefinite de utilizator (e.g. cand trebuie sa se ridice de la calculator, cand ar trebui sa bea apa etc.)). Sistemul permite partajarea doar a unor categorii de actiuni cu un alt utilizator al aceluiasi sistem (e.g. medic), cu scopul vizualizarii.
QuizzGame (B) [Propunere Continental]
Implementati un server multithreading care suporta oricati clienti. Serverul va coordona clientii care raspund la un set de intrebari pe rand, in ordinea in care s-au inregistrat. Fiecarui client i se pune o intrebare si are un numar n de secunde pentru a raspunde la intrebare. Serverul verifica raspunsul dat de client si daca este corect va retine punctajul pentru acel client. De asemenea, serverul sincronizeaza toti clienti intre ei si ofera fiecaruia un timp de n secunde pentru a raspunde. Comunicarea intre server si client se va realiza folosind socket-uri. Toata logica va fi realizata in server, clientul doar raspunde la intrebari. Intrebarile cu variantele de raspuns vor fi stocate fie in fisiere XML fie intr-o baza de date SQLite. Serverul va gestiona situatiile in care unul din participanti paraseste jocul astfel incat jocul sa continue fara probleme.
Actori: serverul, clientii ( un numar nelimitat)
- Activitati:
- inregistrarea clientilor
- incarcarea de intrebari din formatul mentionat anterior de catre server
- intrebare adresata catre clienti in ordinea inregistrarii lor, clientul va alege din optiunile oferite intr-un numar de secunde n
- parasirea unui client va face ca el sa fie eliminat din rundele de intrebari
- terminarea jocului cand intrebarile au fost parcurse -> anuntare castigator catre toti clientii.
SimplePubSubTopicBroker (B)
Sa se implementeze un sistem distribuit publish/subscribe, ce e format dintr-o infrastructura de servere (brokers) si doua seturi de clienti (publishers si subscribers). Brokerii ofera un serviciu de diseminare mesaje pentru subscribers ce au interese (subscriptii) pentru un flux de informatie (publicatii) generat de publishers. Un broker stocheaza subscriptiile primite de la subscribers, primeste publicatiile de la publishers, realizeaza o operatie de potrivire cu subscriptiile stocate, si conform rezultatului trimite publicatiile care se potrivesc catre subscriberii interesati. Varianta topic a unui sistem pub/sub presupune o potrivire bazata pe topicuri.
OnlineInfoOlympiad (B)
Sa se implementeze un model client-server pentru o olimpiada de informatica on-line. Server-ul trimite clientilor cerinta unei probleme de programare( aleasa "random" dintr-o lista de probleme) si alte informatii referitoare la desfasurarea competitiei( timpul alocat rezolvarii problemei, diferite fisiere input-output de test, etc). Clientii trebuie sa trimita inapoi catre server cate un fisier sursa (ce contine rezolvarea problemei). Dupa terminarea timpului alocat rezolvarii problemelor, server-ul va compila si rula sursele fiecarui client in parte, ii va nota (in functie de corectitudinea rezolvarii, viteza de executie, viteza de upload, etc... ) si va trimite clientilor lista cu rezultate. Server-ul trebuie configurat sa memoreze o lista cu probleme de progamare si, pentru fiecare problema, cate o serie de fisiere input-output( pentru testarea corectitudinii rezolvarii ). De asemenea, server-ul va mai avea un fisier de configurare ce contine diferite informatii de configurare( ex: despre numarul maxim de participanti, durata maxima pentru fiecare problema, etc... ).
MonitorAndLogS (B)
Sa se conceapa un server ce colecteaza regulat diferite informatii privitoare la calculatorul pe care ruleaza (minim informatii despre procese, gradul de incarcare, utilizatorii conectati, servicii oferite, tipuri de conexiuni); aceste date vor fi salvate in fisiere log. Pe baza log-urilor, sa se genereze minim urmatoarele statistici: incarcarea memoriei pe intervale de timp, numarul de conectari ale fiecarui user pe intervale de timp, numarul de conexiuni pentru fiecare serviciu pe intervale de timp. Se va proiecta si un client care va furniza in format text sau grafic aceste statistici, folosind serviciile oferite de server.
MyFileTransferProtocol (B)
Sa se implementeze o aplicatie client/server ce permite transferul de fisiere intre clienti si server. Serverul va pune la dispozitia clientilor un numar minim de comenzi ce permit autentificarea, operarea cu directoare si cu fisiere. De asemenea, va trebui implementat un mecanism de autorizare (whitelist/blacklist) pentru conturile utilizatorilor si un mecanism de transmitere securizata a parolei la autentificare.
Championship (B)
Sa se realizeze o aplicatie client/server ce va administra diferite campionate. Aplicatia server va avea urmatoarele functionalitati: inregistrarea utilizatorilor(diferite tipuri de utilizatori: obisnuiti, administratori). Toate comenzile vor fi restrictionate de sectiunea de logare. Dupa logare utilizatorii vor putea primi informatii despre ultimele campionate inregistrate, avand posibilitatea de a se inscrie la ele. Comenzile ce trebuie implementate: inregistrarea unui campionat, specificarea jocului, numarului de jucatori, diferite reguli sau structuri de campionat(single-elimination, double elimination), modul de extragere a partidelor(deciderea partidelor), inregistrarea unui utiliziator intr-un campionat, utilizatorul va fi informat via e-mail daca a fost acceptat in campionatul respectiv, si va primi informatii aditionale despre partidele sale (ora, adversarul, etc...) Utilizatorul are posibilitatea sa reprogrameze o sesiune de joc. Utilizatorii administratori vor detine un istoric al scorurilor partidelor.
ReleaseManagementSystem (B)
Sa se realizeze o aplicatie client/server care sa permita utilizatorilor sa realizeze managementul comod al plugin-urilor/extensiilor/modulelor unei platforme sau aplicatii (e.g., CPAN, Eclipse, Firefox, PECL etc.), oferindu-le posibilitatea vizualizarii listei existente a extensiilor si download-ul versiunilor mai recente, eventual la anumite momente de timp prestabilite (specificate via un fisier de configurare).
CastleWars (B)
Sa se implementeze o aplicatie client/server pentru jocul Castle Wars. Daca un client pierde legatura cu serverul va fi substituit de catre server. Numarul maxim de partide, numarul maxim de jucatori pentru o partida, precum si alti parametri vor fi specificati intr-un fisier de configurare.
MyDownloader (B)
Sa se implementeze o aplicatie ce descarca toate fisierele existente la un url specificat. Aplicatia va permite mentionarea gradului de adancime pana la care se va realiza descarcarea. De asemenea, daca va fi specificata o pagina web, sa se descarce toate fisierele specificate in link-urile de pe acea pagina. Implementarea se va baza pe protocolul HTTP. Daca procesul de descarcare este intrerupt, continuarea lui se va relua din momentul intreruperii.
AppRepository (B)
Sa se realizeze o aplicatie client/server pentru un depozit (repository) de aplicatii software. Adaugarea de noi aplicatii se va putea realiza de oricare client, specificindu-se cerintele hardware si/sau cele software (e.g., memorie RAM, procesor, platforma, biblioteci suplimentare etc.) pentru rularea acelei aplicatii. Serverul va oferi facilitati de cautare a unei aplicatii, in functie de diverse criterii (nume, cerinte, producator, statut - open source, freeware, shareware etc.).
Chess (B)
Sa se conceapa o aplicatie client/server care pune la dispozitie o tabla de joc si supervizeaza desfasurarea fiecarei partide de sah, actionand ca un punct central la care clientii din retea se conecteaza. Serverul determina momentul in care jocul s-a terminat si anunta castigatorul. Regulile pot fi alese (simplificate) de catre proiectant, cu conditia ca jocul sa fie interactiv.
NTSF (B)
Sa se realizeze o aplicatie client/server care sa permita unor utilizatori (maxim 4 simultan) sa joace in mod concurent bine-cunoscutul joc "Nu te supara frate!". Se va retine si topul punctajelor obtinute de fiecare jucator in parte si, eventual, starea jocului in cazul in care oponentii doresc sa-l intrerupa temporar.
Nuilding (B)
Sa se scrie o aplicatie client/server care sa ofere operatii de management a diferitelor informatii (proprietar, tip, capacitate, imagine interioara etc.) despre salile care compun cladirile Universitatii. Se vor pune la dispozitie si diverse posibilitati de cautare (de exemplu, toate salile din corpul C care sunt destinate ca birouri ocupate de maxim 4 persoane). Server va oferi si servicii de administrare a informatiilor referitoare la cladiri.
Reversi (B)
Sa se scrie o aplicatie client/server care sa ofere unor perechi de clienti posibilitatea sa joace Reversi. Jucatorii vor fi identificati prin nume unice, putindu-se realiza si un clasament al primilor N cei mai buni jucatori.
Risk (B)
Sa se implementeze o aplicatie client/server pentru jocul Risk. Daca un client pierde legatura cu serverul, va fi substituit de catre server. Numarul maxim de partide, numarul maxim de jucatori pentru o partida, precum si alti parametri vor fi specificati intr-un fisier de configurare.
Simroute (B)
Sa se scrie un simulator al activitatii de routare (dirijare) interna a pachetelor intr-un sistem autonom compus din mai multe sisteme terminale, sisteme intermediare si un numar de N routere (drept caz particular, se poate lua N cu valoarea 3) pe baza unor rute statice preluate dintr-un fisier de configurare. Simulatorul va transmite clientilor sai, la cerere, starea curenta a simularii realizate.
Draughts (B)
Sa se implementeze o aplicatie client/server care sa ofere posibilitatea unor perechi de clienti sa joace diverse variatii de "draughts" (dame) si sa mentina clasamente diverse pentru fiecare tip de joc
Brax (B)
Sa se implementeze o aplicatie client/server care sa ofere unor perechi de clienti posibilitatea de a juca Brax si care sa mentina clasamente detaliate
MingMang (B)
Sa se implementeze o aplicatie client/server care sa ofere unor perechi de clienti posibilitatea de a juca Ming Mang si care sa mentina clasamente detaliate
Nfiles (B)
Sa se scrie o aplicatie client/server care sa dea posibilitatea de a lista informatii (nume, lungime, permisiuni, proprietar etc.) privitoare la fisierele aflate la distanta. Se presupune ca aceste fisiere sint stocate identic pe diferite masini, astfel incit in cazul in care o masina este indisponibila, sa fie cautate la alte adrese IP (aceste adrese vor fi memorate intr-un fisier al serverului). Daca un client solicita informatii despre fisierele unei masini a carei adresa nu exista in fisier, adresa masinii va fi inserata in acesta.
Offline Messenger (B)
Sa se dezvolte o aplicatie client/server care sa permita schimbul de mesaje intre utilizatori care sunt conectati si sa ofere functionalitatea trimiterii mesajelor si catre utilizatorii offline, acestora din urma aparandu-le mesajele atunci cand se vor conecta la server. De asemenea, utilizatorii vor avea posibilitatea de a trimite un raspuns (reply) in mod specific la anumite mesaje primite. Aplicatia va oferi si istoricul conversatiilor pentru si cu fiecare utilizator in parte.
PlayGo (B)
Sa se implementeze o aplicatie client/server pentru jocul de Go. Partidele se vor juca in perechi de clienti, iar serverul va asigura managementul partidelor, precum si alegerea jucatorilor pentru o partida, in cazul in care sunt mai mult de doi clienti care doresc sa joace.
IoT Simulator (B)
Implementati un client cu o interfata grafica atractiva care va juca rol de remote (telecomanda) pentru mai multe "dispozitive inteligente" (servere concurente), ce vor fi, de asemenea, dezvoltate. Clientul va putea alege cu ce dispozitive sa se conecteze dintre cele disponibile (minim 3, cum ar fi bec, telecomanda TV, inca unul la alegere) si va fi capabil sa schimbe starea (cresterea volumului, schimbarea canalului etc). Aceste schimbari de stare vor putea fi vizibile atat in interfata, cat si in starea serverului.
CastDoc (B)
Sa se implementeze un server si un client (cu interfata grafica) pentru transformarea de documente dintr-un tip in altul. Clientul va transmite tipul documentului initial, tipul documentului final. In cazul in care serverul poate realiza transformarea, se va transmite documentul initial si se va primi documentul rezultat. Pentru server, se va utiliza un fisier de configurare in care se vor specifica transformarile suportate, precum si utilitarele care realizeaza aceste transformari. Drept exemple de utilitare, pot fi mentionate: ps2pdf, pdf2ps, latex2html, asp2php. In mod obligatoriu serverul va oferi, de asemenea, functionalitatea de caching (verificare nume fisier si hash continut).
Remote Health Monitoring System (B)
Implementați un sistem care permite monitorizarea la distanță a parametrilor de sănătate pentru pacienți. Sistemul ar utiliza senzori conectați la Internet pentru a transmite date vitale (de exemplu, ritmul cardiac, tensiunea arterială) către medicii care îi supraveghează. Acesta va include alerte pentru valorile anormale și o interfață pentru vizualizarea istoricului medical.
SmartParkingAssistant (B)
Dezvoltați o aplicație client/server care ajută șoferii să găsească locuri de parcare disponibile în timp real. Serverul va colecta date despre disponibilitatea locurilor de parcare de la senzori si camere inteligente, ce vor fi simulate, și le va furniza clienților.
HealthTrackerNetwork (B)
Implementați o rețea de dispozitive de monitorizare a sănătății care colectează și transmite date despre parametrii de sănătate (ritm cardiac, nivel de oxigen, etc.) la un server central pentru analiză și alerte. Se va dezvolta un client care sa poată fi consultat (prin operații complexe de căutare, inclusiv în istoric) și monitorizat de personal specializat.
EnergyConsumptionMonitor (B)
Creați o aplicație care monitorizează și raportează consumul de energie electrică în locuințe sau birouri, permițând utilizatorilor să optimizeze consumul și să identifice pierderile. Se va dezvolta un client care sa poată fi consultat (prin operații complexe de căutare, inclusiv în istoric).
LocalMarketplacePlatform (B)
Dezvoltați o platformă locală de tip marketplace, care permite utilizatorilor să cumpere și să vândă produse în comunitatea lor, folosind un server central pentru gestionarea tranzacțiilor și a listelor de produse. Se va dezvolta un client care sa poată oferi minim 10 operații (e.g. vizualizarea produselor, crearea de oferte, vizualizarea unui istoric al achizițiilor realizate et.al.)
PersonalBudgetingTool (B)
Implementați o aplicație de bugetare personală care sincronizează tranzacțiile și conturile bancare (ce vor fi simulate) ale utilizatorilor, oferind analize financiare și sugestii de economisire. Se va dezvolta un client care sa permita vizualizarea și managementul facil.
RemoteJobBoard (B)
Dezvoltati o aplicatie bazata pe arhitectura client/server ce simuleaza un panou de anunțuri pentru locuri de muncă la distanță, care conectează angajatorii cu potențialii angajați, facilitând trimiterea și primirea CV-urilor și a ofertelor de muncă. Clientul va oferi, printr-o interfata grafica, suport pentru o interacțiune fluidă a utilizatorului final cu sistemul dezvoltat.
FoodWasteReducer (B)
Dezvoltați o aplicație bazata pe arhitectura client/server care ajută la reducerea risipei alimentare prin conectarea magazinelor și restaurantelor cu organizații caritabile sau cu persoane care au nevoie de alimente, facilitând donațiile de alimente nevândute.
ServiceRegistry (B)
Creati o aplicatie server care funcționează ca un registru de servicii distribuite, pentru descoperirea serviciilor într-o rețea de calculatoare. Serverul va gestiona o listă de servicii active, fiecare identificat printr-un nume unic, o adresă IP și un port. Fiecare serviciu înregistrat trebuie să aibă un timp de expirare (TEx) specificat, după care este eliminat automat din registru dacă nu este reînnoit. Serverul va expune următoarele funcționalități printr-un API simplu: inregistrare serviciu (clienții pot înregistra un nou serviciu specificând parametrii necesari (nume, IP, port, TEx)), reînnoire serviciu (fiecare serviciu își reînnoiește înregistrarea la intervale regulate pentru a rămâne activ), cerere de adresă (clienții pot obține adresa IP și portul unui serviciu activ folosind numele serviciului), listare servicii active (clienții pot obține lista completă a serviciilor active, cu toate informațiile (nume, IP, port, timp rămas până la expirare)). Serverul trebuie să fie capabil să simuleze un comportament similar unui orchestrator de containere (e.g. Kubernetes sau Podman), oferind funcționalități de “service discovery”. În acest context, orice client poate întreba serverul pentru adresa oricărui serviciu activ și poate obține adresa serviciului cel mai recent actualizat. Serverul va funcționa în mod concurent, comunicând cu clienții prin TCP și folosind mesaje JSON. Pentru testare, dezvoltați un client simplu care poate înregistra, actualiza, șterge și solicita informații despre servicii, simulând funcționarea mai multor servicii care își reînnoiesc automat TEx-ul. De asemenea, se va implementa un mecanism de autentificare, prin care doar clienții autorizați pot înregistra sau actualiza servicii, si functionalitati de logare și monitorizare, astfel încât fiecare cerere primită de server să fie înregistrată într-un fișier de log (cu timestamp, IP, port, acțiune).
MinimalAuth (C)
Implementati un caz de utilizare minimal pentru protocolul OAuth. Se va implementa un server care pentru fiecare cerere a unui client va genera un token de autentificare si va genera o pereche (token, numar_utilizari_token). Se va implementa un server care va detine niste resurse (e.g. fisiere, date confidentiale) si care vor fi disponibile doar daca clientul care le cere va prezenta un token valid. Se va implementa un client care cere o resursa si in functie de raspunsul primit de la resurse va solicita un token de autentificare. La fiecare request facut cu un token, va scadea numarul de utilizari al tokenului. Ambele servere vor fi concurente.
TokenRateLimiter (C)
Dezvoltați un server care implementeaza un algoritm de limitare a numarului de cereri (“rate limiting”) pe baza unui token de acces. Limita va fi pentru fiecare token in parte, iar atunci cand rata este depasita, serverul va returna un mesaj de eroare. Un client va obtine token-ul in urma inregistrarii pe server. Ca functionalitate oferita de server, va fi simulata operatia de “upload”: clientul va transmite un nume de fisier (generat aleatoriu), iar serverul va returna un mesaj de confirmare, ce va contine si numele trimis (nu se va efectua si incarcarea efectiva a unui fisier). Se va dezvolta si un client aferent care, pe langa functionalitatea de obtinere a token-ului, va permite si introducerea unei valori ce reprezinta numarul de cereri pe minut pe care sa le transmita automat serverului.
ConfigurableTimeServer (C)
Dezvoltati o aplicatie client/server care furnizeaza data si ora curente, pentru multiple fusuri orare, utilizatorilor inregistrati. Fiecare utilizator isi va putea stabili propriul fus orar si se va putea “abona” (si “dezabona”) la informatii privind un numar nelimitat de alte fusuri orare, din alte tari/orase. Aplicatia client va permite solicitarea de informatii privind un anumit fus orar si informatii, primite in acelasi timp, privind toate fusurile orare la care s-a “abonat” un utilizator.
MyRPC (C)
Sa se implementeze o aplicatie client/server ce permite apelul procedurilor la distanta. Serverul contine o lista de proceduri predefinite, clientul avand posibilitatea de a obtine aceasta lista si de a trimite cereri serverului. Similar mecanismului de la RPC (portmapper, XDR), se va crea un protocol de realizare a cererilor si furnizare a raspunsurilor.
SecProxy (C)
Sa se realizeze un proxy dedicat care realizeaza scanarea si monitorizarea intregului trafic catre o aplicatie. Daca este indentificata o informatie sensibila, atunci va notifica administratorul sistemului si se va bloca temporar comunicarea cu sursa informatiilor nepermise. Administratorul poate modifica aceasta optiune.
SStatusQuo (C)
Dezvoltati o aplicatie client/server care permite unui client sa vizualizeze diverse informatii disponibile pe un server specificat (utilizatori, numar de fisiere, capacitate de stocare, gradul de incarcare). Se stie ca exista un numar de N servere (minim 5), fiecare server se poate conecta la alte 2 servere, iar un client nu se poate conecta decat la un singur server.
Visit (C)
Sa se implementeze o aplicatie client/server care furnizeaza carti de vizita in format vCard. Se vor oferi servicii de cautare si de adaugare/actualizare/stergere ca cartilor de vizita. Serverul va oferi servicii doar clientilor din reteaua locala.
MyProxy (C)
Sa se implementeze o aplicatie client/server ce permite transferul fisierelor (acestea se presupun a fi cunoscute in prealabil) si o aplicatie proxy ce intermediaza comunicarea intre client si server. Atunci cand clientul doreste sa descarce un fisier, proxy-ul va fi cel care receptioneaza cererea, il descarca de pe server, iar apoi il furnizeaza clientului. Serverul nu trebuie sa faca diferenta intre proxy si un client normal, iar clientul nu trebuie sa faca diferenta intre proxy si server.
Sincronic (C)
Fie un server TCP concurent la care se pot conecta simultan maxim N clienti. Serverul primeste mesaje, din S in S minute, de la macar M dintre clienti, cu M < N. Daca mesajele primite de la cei M clienti nu coincid, atunci serverul va trimite celor N clienti mesajul "gata", dupa care deconecteaza toti clientii. Daca mesajele coincid, serverul va trimite tuturor clientilor mesajul "continua" si va astepta urmatoarele mesaje de la alti doi clienti ai sai.
Potter (C)
Sa se realizeze o aplicatie server care permite conectarea simultana a maxim 5 clienti. La un moment dat un singur client poate fi Potter, in mod obligatoriu clasa IP-ului clientului trebuie sa fie de clasa C. La fiecare 48 secunde fiecare client poate alege un alt client caruia ii vor fi ignorate mesajele timp de 32 de secunde. Potter poate trimite mesaje clientilor sai doar la intervale de 32 de secunde. Aleatoriu, serverul poate deconecta clientii, exceptindu-l pe Potter. Un client deconectat nu va putea sa se reconecteze decit dupa 56 de secunde.
Jom & Terry (C)
Sa se implementeze un server TCP concurent care rezolva conflictul dintre maxim 4 perechi de clienti - identificati prin numele Jom si, respectiv, Terry - in felul urmator. Daca se conecteaza primul un client Terry, atunci va primi o bila magica, in caz contrar o va primi un client Jom. Clientul care poseda bila magica va trimite din 3 in 3 secunde (prin intermediul serverului) tuturor celorlalti clienti cate un mesaj de avertisment. Mesajul va fi ignorat de clientii care poseda la randul lor bila magica. Daca un client primeste de trei ori cate un mesaj de avertisment, va fi deconectat.
WeatherMonitor (C)
Sa se scrie o aplicatie client/server pentru managementul (e.g., listare, modificare, stergere) informatiilor meteo pentru o anumita zona. La un port separat se va oferi posibilitatea actualizarii informatiilor meteo privitoare la o localitate sau multime de localitati ale zonei considerate.
WarSpace (C)
Sa se simuleze urmatoarea situatie utilizand o arhitectura client-server TCP concurenta. Baza stelara terrana din quadrantul X al galaxiei Y - reprezentata de server - este supusa atacurilor periodice din partea rasei extraterestre cotropitoare wrrrz. La server va fi conectat in permanenta un general responsabil cu apararea - client. Generalul va avea in subordine la un moment dat pana la 5 capitani de nava - alti clienti conectati la server, cu rolul de a proteja baza de atacurile maleficilor wrrrz. Un atac extraterestru e semnificat de conectarea unei nave wrrrz - alt tip de client - la server. Atacul e tratat de server prin deconectarea clientului extraterestru si a unuia din cei ce corespund capitanilor (cele doua nave sunt trimise pe campul de lupta). Clientul aparator va genera un numar random ce identifica rezultatul confruntarii. Daca este impar - victorios - se va reconecta la server, daca este par - cele doua nave se vor anihila reciproc - isi va incheia executia (clientul wrrrz pierde intotdeauna - se termina). Daca toti capitanii de nava au fost deconectati (au pierit in lupta), generalul va putea rezista la trei atacuri - trei conectari de clienti wrrrz ce vor fi deconectati de catre server. Daca pierde cele trei "vieti" si baza stelara - serverul - nu mai are alt capitan de nava - client - sosit intre timp pentru a o apara, la urmatorul atac wrrrz, clientul general va trimite un mesaj de autodistrugere catre server - serverul il va deconecta si se va inchide. (Clientii specificati isi vor identifica rolul - general, capitan, wrrrz - prin trimiterea unui mesaj de identificare in urma conectarii la server)
Robin Hood (C)
Un server TCP concurent va administra urmatoarea situatie din padurea Sherwood. In prima faza un client ce va avea rol de Robin Hood se va conecta la server. Alti clienti cu rol de nobili vor fi conectati periodic la server in urmatorul mod. Un client cu rol de nobil va primi ca parametru la rulare un numar ce identifica averea respectivului (maxim 10000 de galbeni). In urma conectarii va comunica acest parametru serverului. In cazul in care Robin Hood este conectat la server, serverul va trimite clientului cu rol de nobil un mesaj prin care ii indica scaderea averii cu 100 de galbeni - "taxa de intrare" in padure , si il va deconecta. Clientul cu rol de nobil va astepta 5 secunde si va incerca o noua trecere prin padure - reconectare la server. In cazul in care Robin Hood nu este conectat la server (vezi mai jos cazul), in momentul conectarii unui client cu rol de nobil, serverul va trimite un mesaj de genul "poti trece" catre respectivul client, iar acesta va astepta 3 secunde dupa care va afisa ca mesaj "am scapat!!!" si isi va incheia executia. Daca dupa incercari esuate repetate ale unui client cu rol de nobil de a trece prin padure averea acestuia este epuizata, respectivul client va afisa ca mesaj "nu mai am bani de drum" si isi va incheia executia. Robin Hood va fi deconectat de la server in mod periodic in momentul raziilor serifului de Nottingham, un alt client, ce se va conecta la server la intervale random de timp (pana la un minut) si va fi deconectat imediat. Robin Hood va sta in stare de asteptare timp de 15 secunde dupa care se va reconecta la server. (Maxim 3 nobili vor putea incerca traversarea padurii la un moment dat - conectati la server. Clientii specificati isi vor identifica rolul - Robin Hood, nobil, serif - prin trimiterea unui mesaj de identificare in urma conectarii la server)
Netls (C)
Sa se scrie o aplicatie client/server pentru listarea de la distanta a continutului unui director, precizindu-se tipul, lungimea, proprietarul si alte informatii relevante despre intrarile acelui director. Se va furniza si numarul total de octeti ocupati de toate fisierele din acel director. Se va implementa si o metoda recursiva de listare a continutului subdirectoarelor directorului in cauza.
Rcron (C)
Sa se scrie un server furnizind servicii de planificare a unor activitati periodice, descrise de diversi utilizatori (e.g., stergerea fisierelor temporare in fiecare zi, la miezul noptii; trimiterea unui e-mail din N in N ore etc.). Se va implementa si un client simplu care sa acceseze functionalitatile serverului.
Lunch01 (C)
Fie un server TCP concurent la care se pot conecta maxim N clienti. Din T in T secunde (T < 120) serverul va primi un mesaj de la o parte din clienti ce va identifica printr-un numar un fel de mancare (de la 1 la 5) ales random de respectivul client. Serverul va contoriza cererile iar pentru felul cel mai preferat (avand cele mai multe cereri) va trimite la clientii solicitanti ca raspuns: "Masa e servita". Celorlalti clienti (care au ales alt fel), le va raspunde cu "Indisponibil". Un client ce a fost servit cu pranzul va afisa un mesaj "Satul!" si isi va incheia executia. Un client refuzat va mai incerca o cerere aleasa tot random dupa un interval ales de asemeni aleator (pana in 60 de secunde). La trei cereri refuzate, un client va afisa "Schimb cantina! Aici mor de foame!" si isi va incheia executia.
RegisterS (C)
Sa se implementeze o aplicatie client/server care va oferi clientilor informatii privitoare la serverele (adresa ip si port) care ofera serviciile dorite de acestia. Modalitatea de functionare este urmatoarea: atunci cand un server care ofera un anumit serviciu este pornit, acesta va trimite serverului de inregistrare adresa ip, portul si numele serviciului oferit; atunci cand un client doreste un anumit serviciu, va trimite mai intai o cerere la serverul de inregistrare cu numele serviciului dorit, iar acesta ii va returna un mesaj ce va contine adresa ip si portul serverului care ofera serviciul dorit.
WebS (C)
Sa se implementeze un client si un server web de baza care vor comunica folosind protocolul TCP. Serverul va contine cateva pagini web (fisiere .html simple) si va pune la dispozitia clientilor urmatoarele comenzi: login (autentificarea la server), list (furnizeaza lista cu fisierele continute), get (copie o pagina web de pe server), add (uploadeaza pe server o pagina web), delete (sterge o pagina web de pe server). Clientul va interactiona cu serverul folosind comenzile oferite.
ConsoleShopper (C)
Sa se dezvolte o aplicatie client/server care sa ofere functionalitatea unui magazin online de produse. Aceasta trebuie sa suporte autentificarea utilizatorilor pe baza unor conturi definite, organizarea produselor in diverse categorii, afisarea acestora, plasarea de comenzi, salvarea cosului de cumparaturi etc.
Password Manager (C)
Sa se dezvolte o aplicatie client/server care sa ofere functionalitatea unui manager de parole. Aplicatia va suporta conturi de utilizator multiple, fiecare utilizator autentificandu-se pe baza unei parole master. Fiecare utilizator va putea sa-si organizeze parolele salvate in diferite categorii, iar pentru fiecare parola va avea posibilitatea introducerii unor informatii precum titlu, username, url, notite etc.
Pheasant (C)
Sa se realizeze o aplicatie ce va implementa jocul fazan, ce permite existenta mai multor sesiuni paralele. Intr-un fisier de configurare se va specifica numarul de jucatori. Va exista un fisier de tip dictionar, ce va fi folosit pentru validarea cuvintelor. Utilizatorii vor fi pusi intr-o ordine in care va functiona jocul. Primul jucator alege o litera, dupa care alege un cuvant ce incepe cu litera respectiva. Urmatorul utilizator va trebui sa trimita un cuvant ce va incepe cu ultimele doua litere din cuvantul jucatorului precedent. Cand cuvantul trimis de un utilizator nu face parte din dictionar, jucatorul a pierdut si va fi deconectat. Utilizatorul care ramane la sfarsit castiga jocul.
Userfinder (C)
Sa se scrie o aplicatie client/server care ofera posibilitatea consultarii de la distanta a informatiilor privitoare la accesarea unui cont de utilizator pe o anumita masina. Aplicatia va avea urmatoarele functionalitati: afisarea ultimelor N conectari, daca utilizatorul este sau nu conectat in momentul solicitarii acestor informatii, locatia de unde este conectat, permisiunile utilizatorului asupra unui fisier de pe masina(fisierul va fi cautat, si apoi se vor determina permisiunile asupra fisierului). Aplicatia va permite celui care cauta un alt utilizator, sa il poate notifica pe acesta printr-un email ca este cautat.
Simple Web Server (C)
Realizati un server concurent ce trimite fisiere (.txt sau .html fara scripturi) din directorul curent catre orice browser se conecteaza la el. Server-ul va trebui sa trimita antete HTTP corecte. Nu implementati un client: server-ul va trebui sa interactioneze corect cu orice browser.
CityExplorerApp (C)
Creați o aplicație bazată pe arhitectura client/server pentru explorarea orașului, care oferă tururi virtuale, locuri de vizitat și informații despre evenimentele locale.
PetCareAssistant (C)
Implementați o aplicație client/server pentru îngrijirea animalelor de companie, care să ajute proprietarii să monitorizeze sănătatea, alimentația și activitatea fizică a animalelor lor.
PersonalAssistantBot (C)
Dezvoltați un client reprezentand un asistent personal virtual ce va oferi de pe server informații, cum ar fi vremea, știrile, amintiri și gestionarea agendei personale. Din aplicația client se va putea realiza si managementul informațiilor de pe server.
CommunityBulletinBoard (C)
Dezvoltati o aplicatie bazata pe arhitectura client/server ce simuleaza un panou de anunțuri comunitare online, unde membrii comunității pot posta evenimente, anunțuri și mesaje de interes local.
FitnessTrackerServer (C)
Creați un server pentru o aplicație de urmărire a activității fizice, care să colecteze și să analizeze date de la dispozitivele purtabile ale utilizatorilor. Din aplicația client se va putea realiza si managementul informațiilor de pe server.
RemoteTechSupport (C)
Implementați un sistem bazat pe arhitectura client/server de suport tehnic la distanță, care permite tehnicienilor să ofere asistență și să rezolve probleme pentru utilizatori.
DigitalMenuBoard (C)
Dezvoltați un sistem bazat pe arhitectura client/server pentru afișarea meniurilor digitale în restaurante, care poate fi actualizat de la distanță de către proprietari sau manageri.
OnlineReservationSystem (C)
Creați un sistem bazat pe arhitectura client/server de rezervări online pentru hoteluri, restaurante sau evenimente, care permite crearea și să gestionarea de rezervări.
De parcurs prevederile privind realizarea/notarea proiectelor.