POO Lab Lucrarea 4: Diferență între versiuni

De la WikiLabs
(Cerințe)
(Cerințe)
 
(Nu s-au afișat 16 versiuni intermediare efectuate de același utilizator)
Linia 15: Linia 15:
 
== Cerințe ==
 
== Cerințe ==
  
# Realizați o clasă numită '''ClientPeer''' cu următoarele restricții:
+
# Realizați o clasă numită <code style="color: green">seriaf.poo.client.ClientPeer</code> 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.
 
#* 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:
 
#* Clasa trebuie să aibă două metode:
#** <code>void sendMessage(String message)</code> - creează un obiect de tip Message și il serializează folosind socket-ul disponibil.
+
#** <code style="color: green">void sendMessage(String message)</code> - creează un obiect de tip Message și il serializează folosind socket-ul disponibil.
#** <code>void sendMessage(String message, String receiver)</code> - creează un obiect de tip PrivateMessage și il serializează folosind socket-ul disponibil.
+
#** <code style="color: green">void sendMessage(String message, String recipient)</code> - creează un obiect de tip PrivateMessage și il serializează folosind socket-ul disponibil.
# Realizați o clasă numită '''TextClient''', executabilă, cu următoarele restricții:
+
# Realizați o clasă numită <code style="color: green">seriaf.poo.client.TextClient</code>, executabilă, care să realizeze următoarele funcții:
#* Metoda main din clasă trebuie să deschidă un Socket la adresa localhost (127.0.0.1) pe portul 9000
+
#* Metoda main din clasă trebuie să citească de la tastatură un String reprezentând un nume de utilizator
#* Cât timp conexiunea este activă, să citească de la tastatură (folosind clasa Console - vezi [https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#console-- System.console()]) șiruri de caractere cu care apoi să apeleze metodele sendMessage de mai sus (Notă: Aveți dreptul să alegeți ce format doriți pentru a marca un mesaj privat, dar trebuie să fie descris în corpul email-ului în care submiteți tema; O sugestie ar fi un text de forma <code>/w John Hello!</code> care specifică un mesaj privat către user-ul John, cu conținutul "Hello!").
+
#* Metoda main din clasă trebuie să deschidă apoi un Socket la adresa localhost (127.0.0.1) pe portul 9000
# Realizați o clasă numită '''ServerPeer''' cu următoarele restricții:
+
#* Metoda main din clasă trebuie să instanțieze un obiect de tip ClientPeer
#* Constructorul clasei trebuie să ia ca argument o referință la un obiect de tip Socket, deja conectat.
+
#* 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!").
#* Cât timp conexiunea nu este întreruptă, să se deserializeze obiecte de tip Message și să se afișeze formatat pe ecran.
+
#* Procesul se poate încheia dacă mesajul introdus de la tastatură este <code>/q</code>
# Realizați o clasă numită '''Server''', executabilă, cu următoarele restricții:
+
# Realizați o clasă numită <code style="color: green">seriaf.poo.server.ServerPeer</code> cu următoarele restricții:
#* Metoda main din această clasă trebuie să deschidă un ServerSocket pe portul 9000.
+
#* Constructorul clasei trebuie să ia ca argument o referință la un obiect de tip <code style="color: green">Socket</code>, deja conectat.
#* Odată conectat un client, se creează un obiect de tip ServerPeer, folosing Socket-ul obținut din ServerSocket care va citi obiectele de pe stream, conform punctului 3 de mai sus.
+
#* 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.
# Adaptați clasele Message și PrivateMessage astfel încât să poată fi serializate.
+
# 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 (<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>.
 +
#* 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.
 +
# 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

Cerințe

  1. 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.
  2. 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ă (folosind BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); și metoda readLine()) șiruri de caractere cu care apoi să apeleze metodele sendMessage 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
  3. 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 tip Message și să le afișeze, formatate, pe ecran.
  4. 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șierul server.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 metoda accept(), și se va apela metoda void run() a acestuia.
  5. Adaptați clasele Message și PrivateMessage astfel încât să poată fi serializate.
  6. 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.