Diferență între revizuiri ale paginii „POO Lab Lucrarea 4”
De la WikiLabs
Jump to navigationJump to search(Nu s-au afișat 7 versiuni intermediare efectuate de același utilizator) | |||
Linia 24: | Linia 24: | ||
#* Metoda main din clasă trebuie să deschidă apoi un Socket la adresa localhost (127.0.0.1) pe portul 9000 | #* Metoda main din clasă trebuie să deschidă apoi un Socket la adresa localhost (127.0.0.1) pe portul 9000 | ||
#* Metoda main din clasă trebuie să instanțieze un obiect de tip ClientPeer | #* Metoda main din clasă trebuie să instanțieze un obiect de tip ClientPeer | ||
− | #* Apoi, în metoda <code style="color: green">main</code>, până la oprirea procesului, să citească de la tastatură (folosind | + | #* Apoi, în metoda <code style="color: green">main</code>, până la oprirea procesului, să citească de la tastatură (folosind <code style="color: green">BufferedReader in = new BufferedReader(new InputStreamReader(System.in));</code> și metoda <code style="color: green">readLine()</code>) șiruri de caractere cu care apoi să apeleze metodele <code style="color: green">sendMessage</code> de mai sus (Notă: Pentru a trimite mesaje private, utilizatorul trebuie să introducă un text de forma <code>/w John Hello!</code> care specifică un mesaj privat către user-ul John, cu conținutul "Hello!"). |
#* Procesul se poate încheia dacă mesajul introdus de la tastatură este <code>/q</code> | #* Procesul se poate încheia dacă mesajul introdus de la tastatură este <code>/q</code> | ||
# Realizați o clasă numită <code style="color: green">seriaf.poo.server.ServerPeer</code> cu următoarele restricții: | # Realizați o clasă numită <code style="color: green">seriaf.poo.server.ServerPeer</code> cu următoarele restricții: | ||
Linia 30: | Linia 30: | ||
#* Clasa trebuie să aibă o metodă <code style="color: green">void run()</code>, care, cât timp conexiunea nu este întreruptă (nu se aruncă <code style="color: green">java.io.EOFException</code>), să deserializeze obiecte de tip <code style="color: green">Message</code> și să le afișeze, formatate, pe ecran. | #* Clasa trebuie să aibă o metodă <code style="color: green">void run()</code>, care, cât timp conexiunea nu este întreruptă (nu se aruncă <code style="color: green">java.io.EOFException</code>), să deserializeze obiecte de tip <code style="color: green">Message</code> și să le afișeze, formatate, pe ecran. | ||
# Realizați o clasă numită <code style="color: green">seriaf.poo.server.Server</code>, executabilă, cu următoarele restricții: | # Realizați o clasă numită <code style="color: green">seriaf.poo.server.Server</code>, executabilă, cu următoarele restricții: | ||
− | #* Metoda main din această clasă trebuie să folosească un obiect de tip '''ServerConfig''' pentru a citi un număr de port din fișierul de configurație implicit (server.conf); | + | #* Metoda main din această clasă trebuie să folosească un obiect de tip '''ServerConfig''' pentru a citi un număr de port din fișierul de configurație implicit (<code style="color: blue">server.conf</code>); pentru testare, fișierul <code style="color: blue">server.conf</code> trebuie să definească cheia '''TCP_PORT''' ca fiind '''9000'''. |
#* Folosind numărul de port de la punctul anterior, să deschidă un <code style="color: green">ServerSocket</code>. | #* Folosind numărul de port de la punctul anterior, să deschidă un <code style="color: green">ServerSocket</code>. | ||
− | #* Odată conectat un client, se creează un obiect de tip <code style="color: green">ServerPeer</code>, folosind Socket-ul obținut de la metoda <code style="color: green">accept()</code>, | + | #* Odată conectat un client, se creează un obiect de tip <code style="color: green">ServerPeer</code>, folosind Socket-ul obținut de la metoda <code style="color: green">accept()</code>, și se va apela metoda <code style="color: green">void run()</code> a acestuia. |
# Adaptați clasele <code style="color: green">Message</code> și <code style="color: green">PrivateMessage</code> astfel încât să poată fi serializate. | # Adaptați clasele <code style="color: green">Message</code> și <code style="color: green">PrivateMessage</code> astfel încât să poată fi serializate. | ||
+ | # Toate metodele apelate din alte clase decât cele în care sunt definite, trebuie să fie publice. | ||
+ | Predare: | ||
+ | * Codul se va preda și corecta automat pe platforma [http://homework.dcae.pub.ro/WebObjects/Web-CAT.woa WebCat]. | ||
+ | * <font color="red">'''Atenție:'''</font> Orice nerespectare ale indicațiilor de predare poate duce la pierderea în totalitate a punctajului. | ||
+ | |||
+ | '''<font color="red">Atenție: Temele vor fi verificate anti-plagiat cu soft-uri specializate. Orice temă copiată va fi penalizată (atât sursa cât și copia) cu 100% din punctaj, fără posibilitate de refacere.</font>''' |
Versiunea curentă din 6 noiembrie 2016 15:05
Noțiuni și cunoștințe necesare
- Paradigma Obiect-Orientare; Clase și obiecte
- Noțiuni despre Java
- Realizarea și execuția unui program Java
- Sintaxa limbajului Java; Structura lexicală a unui program
- Convenții de programare
- Noțiuni avansate de programare obiect-orientată
- Java Application Programming Interface (API)
- Stream-uri de Input/Output
- Tratarea excepțiilor
- Serializarea obiectelor
- Socket-uri de rețea
Cerințe
- Realizați o clasă numită
seriaf.poo.client.ClientPeer
cu următoarele restricții:- Constructorul clasei trebuie să ia ca argumente un String reprezentând un nume de utilizator (expeditorul mesajelor) și o referință la un obiect de tip Socket, deja conectat.
- Clasa trebuie să aibă două metode:
void sendMessage(String message)
- creează un obiect de tip Message și il serializează folosind socket-ul disponibil.void sendMessage(String message, String recipient)
- creează un obiect de tip PrivateMessage și il serializează folosind socket-ul disponibil.
- Realizați o clasă numită
seriaf.poo.client.TextClient
, executabilă, care să realizeze următoarele funcții:- Metoda main din clasă trebuie să citească de la tastatură un String reprezentând un nume de utilizator
- Metoda main din clasă trebuie să deschidă apoi un Socket la adresa localhost (127.0.0.1) pe portul 9000
- Metoda main din clasă trebuie să instanțieze un obiect de tip ClientPeer
- Apoi, în metoda
main
, până la oprirea procesului, să citească de la tastatură (folosindBufferedReader in = new BufferedReader(new InputStreamReader(System.in));
și metodareadLine()
) șiruri de caractere cu care apoi să apeleze metodelesendMessage
de mai sus (Notă: Pentru a trimite mesaje private, utilizatorul trebuie să introducă un text de forma/w John Hello!
care specifică un mesaj privat către user-ul John, cu conținutul "Hello!"). - Procesul se poate încheia dacă mesajul introdus de la tastatură este
/q
- Realizați o clasă numită
seriaf.poo.server.ServerPeer
cu următoarele restricții:- Constructorul clasei trebuie să ia ca argument o referință la un obiect de tip
Socket
, deja conectat. - Clasa trebuie să aibă o metodă
void run()
, care, cât timp conexiunea nu este întreruptă (nu se aruncăjava.io.EOFException
), să deserializeze obiecte de tipMessage
și să le afișeze, formatate, pe ecran.
- Constructorul clasei trebuie să ia ca argument o referință la un obiect de tip
- Realizați o clasă numită
seriaf.poo.server.Server
, executabilă, cu următoarele restricții:- Metoda main din această clasă trebuie să folosească un obiect de tip ServerConfig pentru a citi un număr de port din fișierul de configurație implicit (
server.conf
); pentru testare, fișierulserver.conf
trebuie să definească cheia TCP_PORT ca fiind 9000. - Folosind numărul de port de la punctul anterior, să deschidă un
ServerSocket
. - Odată conectat un client, se creează un obiect de tip
ServerPeer
, folosind Socket-ul obținut de la metodaaccept()
, și se va apela metodavoid run()
a acestuia.
- Metoda main din această clasă trebuie să folosească un obiect de tip ServerConfig pentru a citi un număr de port din fișierul de configurație implicit (
- Adaptați clasele
Message
șiPrivateMessage
astfel încât să poată fi serializate. - Toate metodele apelate din alte clase decât cele în care sunt definite, trebuie să fie publice.
Predare:
- Codul se va preda și corecta automat pe platforma WebCat.
- Atenție: Orice nerespectare ale indicațiilor de predare poate duce la pierderea în totalitate a punctajului.
Atenție: Temele vor fi verificate anti-plagiat cu soft-uri specializate. Orice temă copiată va fi penalizată (atât sursa cât și copia) cu 100% din punctaj, fără posibilitate de refacere.