Documente Academic
Documente Profesional
Documente Cultură
Definirea cerinelor :
Aplicaie n Java pentru un sistem de chat.
SPECIFICAIILE
Eclipse
conecta la server cunoscind ip-ul acestuia , soketul si portul vor fii aceleasi si la
server si la client.
Orice client care se conecteaza la server va trebuii sa aibe un nume diferit
fata de cei care sunt deja conectati , astfel serverul va acorda conectarea la chat a
utilizatorului doar dupa ce sa verificat in lista de useri conectati daca nu mai
exista vreunul cu acelasi nume , sau optional se va testa si o parola, in cazul in
care mai exista un client cu acelasi nume serverul trimite cleintului un mesaj de
eroare avertizindul ca numele mai exista sau ca parola este gresita(in cazul in care
sunt 2 cu acelasi nume serverul poate sa accepte conexiunea insa ii va schmba
numele utilizatorului) .La orice cerere serverul poate pune la dispozitie unui client
lista de clienti conectati in momentul de fata daca sa cerut asta printr-o comanda .
Orice client conectat va putea trimite mesaje catre server care vor fii tratate
ca atare , comenzile si mesajele sunt tratate diferit , insa serverul trebuie sa le
proceseze si dupa primirea lor va trimite catre utilizator un mesaj de atentionare
operatie pachet primit cu succes.Mesajele primite de server de la clienti vor fii
trimise toturor clientilor inclusiv celui care a trimis mesajul , astfel se usureaza
modul de tratare a mesajelor.
Faptul ca un user sa conectat sau deconectat de la chat va fii procesat de
catre server scotindul din lista de useri sau adaugandul si in acelasi timp se va
trimite mesaj catre cei conectati anuntindui ca userul X sa conectat sau deconectat
de la chat .
Client :
Aplicaia client se conecteaz la server printr-un ip i port care sunt date ca
i parametrii , in caz contrar se va alege ca server localhost i un port prestabilit n
program.Pentu logare pe server va fii necesar ca user-ul s specifice un nume de
client , care va fii verificat de catre server dac mai exista sau nu , in cazul in care
exist deja acelasi nume se va trimite un mesaj specific i se va face recitirea
numelui.
Clientul va primii pe ecran o list de comenzi , si va putea scrie mesaje care
vor fii trimise catre toti participantii la chat . Se va creea un thread pentru fiecare
client . La cerere clientul poate sa plece de pe pe chat cu o comanda specifica ,
serverul va trata aceasta comanda si va sterge thread-ul clientului si va trimite
comanda de iesire clientului care o va procesa. Tot la cerere se poate accesa lista
de clienti , orice client care va utiliza comanda ex:/list va primii de la server lista
clientilor.Aceasta list este un array list care memoreaza numele fiecarui client
conectat la chat, ea se modifica daca sa creeat sau sters un client thread.
Datorit faptului c se utilizeaza multithread pentru conextiuni un protocol
complex nu exista , datele sunt trimise brut , iar clientul / serverul le va procesa
apoi va rula actiunea pentru fiecare in parte.
DEZVOLTAREA APLIATIEI
Modulele aplicatiei:
SERVER
Aplicaia server stabileste conexiunile intre clienti si executa comenzile clientilor ;
este compus din 2 clase , i anume :
clasa in care se fac initializarile server si
ciclu infinit in care se asteapta conectarea userilor apoi in cazul in care exista
client care doreste sa se conecteze se creeaza o noua instant a clasei
clientThread :
public class MultiThreadChatServer{}
}
catch (IOException e)
{System.out.println(e);}
{
}
}
catch (IOException e) {
System.out.println(e);}
}
while(true){
CLIENT
Aplicatia client se conecteaza la server , va trimite comenzi/text va primii
comenzi/text care vor fii procesate ; aplicatie client prezinta 1 clasa respectiv o
functie :
public class MultiThreadChatClient implements Runnable{
/* aici se face conectarea la server prin creearea unui nou SOKET si se creeaza
obiecte de tip input si output buffer sau se trateaza erorile de conectare.*/
try {
clientSocket = new Socket(host, port_number);
inputLine = new BufferedReader(new InputStreamReader(System.in));
os = new PrintStream(clientSocket.getOutputStream());
is = new DataInputStream(clientSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host "+host);
} catch (IOException e) {
System.err.println("Nu ma pot conecta la server "+host);
}
/*Daca totul sa initializat correct putem trimite date catre soket-ul deschis*/
if (clientSocket != null && os != null && is != null) {
try {
// se creeaza un nou thread care sa citeasca de la server
new Thread(new MultiThreadChatClient()).start();
while (!closed) {
os.println(inputLine.readLine());
}
// se face curatenie
" + e);
}
}
public void run() {
String responseLine;
// citim in continuu de la server pina primim string-ul *** Bye
// in momentul in care am primit comanda de logout trebuie sa inchidem
//conexiunea
try{
while ((responseLine = is.readLine()) != null) {
System.out.println(responseLine);
if (responseLine.indexOf("*** Bye") != -1) break;
}
closed=true;
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}