Diferență între revizuiri ale paginii „POO Lab Lucrarea 4”

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 22 de versiuni intermediare efectuate de același utilizator)
Linia 15: Linia 15:
 
== Cerințe ==
 
== Cerințe ==
  
* Modificați clasele '''Message''' și '''SystemMessage''' astfel încât poată fi serializate. Folosiți '''serialVersionUID''' = 1 pentru '''Message''' și '''serialVersionUID''' = 2 pentru '''SystemMessage'''.
+
# Realizați o clasă numită <code style="color: green">seriaf.poo.client.ClientPeer</code> cu următoarele restricții:
* Scrieți o clasă '''Client''' care să conțină metoda '''main'''. Aceasta primește la execuția programului două argumente care reprezintă un ''host'' și un ''port'' la care se conecteze. Creați un socket de rețea care se conecteze la serverul specificat și folosind clasa '''Console''' citiți mesaje de la tastatură, instanțiați obiecte de tip '''Message''' cu '''sender''' fiind constant "TestUser", '''receiver''' fiind '''null''' și '''content''' fiind textul primit de la tastatură, și serializați obiectele către server. Clientul nu se oprește decât forțat cu combinația de taste '''Ctrl + c'''.
+
#* 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.
* Scrieți o clasa '''Server''' care să conțină metoda '''main'''. Acesta primește la execuția programului un argument care reprezintă ''port-ul'' pe care să accepte conexiuni. Odată un client conectat, serverul citește obiecte de tip '''Message''' de pe stream și le afișează în consolă folosind metoda '''print'''.
+
#* Clasa trebuie aibă două metode:
* Testați cele două clase rulând serverul într-o consolă și clientul în alta.
+
#** <code style="color: green">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, String recipient)</code> - creează un obiect de tip PrivateMessage și il serializează folosind socket-ul disponibil.
 +
# 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ă 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 instanțieze un obiect de tip ClientPeer
 +
#* Apoi, în metoda <code style="color: green">main</code>, până la oprirea procesului, 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>
 +
# Realizați o clasă numită <code style="color: green">seriaf.poo.server.ServerPeer</code> cu următoarele restricții:
 +
#* Constructorul clasei trebuie să ia ca argument o referință la un obiect de tip <code style="color: green">Socket</code>, deja conectat.
 +
#* 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:
 +
#* 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 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.