Sunteți pe pagina 1din 8

CERINELE PROIECTULUI

Definirea cerinelor :
Aplicaie n Java pentru un sistem de chat.

Aplicaia va facilita comunicarea intre mai multe calculatoare fiind necesar


ca un calculator s fie server la care se vor conecta restul pentru a putea
intra in chat;
Design-ul aplicaiei va fii simplu astfel nct sa poat facilita o comunicare
uoar i rapid ;
Conectarea la server se va face prin intermediul unui user i o parol , care
vor fii introduse la nceput ;
Fiecare client conectat la sesiunea de chat va putea vizualiza mesajele
trimise de oricare client conectat la sesiune;
Un user conectat fiind la serverul de chat are posibilitatea de a se deconecta
utilizind o comand specific , posibilitate de a vizualiza toate persoanele
conectate la server de chat printr-o comanda specific.
Posibilitate de a dezvolta aplicaia in timp uor i rapid.

2APLICAIE CLIENT/SERVER N JAVA

SPECIFICAIILE

Specificaii sistem de rulare

Aplicatia de chat client server construita in java cu ajutorul platformei


versiunea 3.4.0 , JRE versiunea 6 .

Eclipse

Modul de instalare al aplicatiei se fac asemanator pe server , respectiv pe


calculatorul client.
Cerinte sistem server:

Sistem de operare Windows XP sau LINUX


1000 MHz procesor
256 MB RAM
300 MB spatiu pe HDD pentru aplicatie
Conexiune la retea sau internet TCP/IP
JRE versiunea 6 instalata

Cerinte sistem client:

Sistem de operare Windows XP


1000 MHz procesor
256 MB RAM
300 MB spatiu pe HDD pentru aplicatie
Conexiune la retea sau internet TCP/IP
JRE versiunea 6 instalata

Specificaiile tehnice ale aplicaiei :


Server:
Serverul va gestiona in mare parte traficul de pachete de comenzi / date
primite de la utilizatori si trimise la acestia; conecatrea la server se va face prin
protocolul tcp/ip utilizand socket si un anumit port de conectare.Clientul se va

3APLICAIE CLIENT/SERVER N JAVA

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.

4APLICAIE CLIENT/SERVER N JAVA

DEZVOLTAREA APLIATIEI

Aplicatia de chat client server dezvoltat n JAVA cu ajutorul platformei


Eclipse versiunea 3.4.0 , JRE versiunea 6 .

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{}

// ne creem 10 obiecte de tip client, deci se vor putea conecta 10 clienti la


server
static

clientThread t[] = new clientThread[10];

// se incearca deschiderea soket-ului de catre server


try {
serverSocket = new ServerSocket(port_number);

}
catch (IOException e)
{System.out.println(e);}

/ Crearea unui obiect socket din ServerSocket care s asculte i s accepte


/ / conexiuni.
/ / Stream-urile de intrare/iesire vor fii in thread-ul clientului din moment ce fiecare client
este servit ca thread //individual
while(true){
try {
clientSocket = serverSocket.accept();
for(int i=0; i<=9; i++){
if(t[i]==null)

5APLICAIE CLIENT/SERVER N JAVA

{
}

(t[i] = new clientThread(clientSocket,t)).start();


break;

}
catch (IOException e) {
System.out.println(e);}
}

clasa prin care un client este recunoscut de


server si trimis spre procesare , cu un constructor prin care se trimit parametrii
SOCKET si thread . In aceasta clasa serverul cere numele clientului , trateaza toate
comenzile lui si trimite mesajele catre toti clientii:
class clientThread extends Thread{}

//constructor clientThread care primeste datele de initializare


public clientThread(Socket clientSocket, clientThread[] t){
this.clientSocket=clientSocket;
this.t=t;
}
public void run()
{
String line;
String name = null;
try{
//ne creem un nou stream de date intrare/iesire
is = new DataInputStream(clientSocket.getInputStream());
os = new PrintStream(clientSocket.getOutputStream());

while(true){

//tratarea comenzilor primite de la client


//daca avem /quit se trimite catre clent command de logout
//daca avem /list trimitem catre client lisa cu useri
if(line.startsWith("/quit")) break;
if(line.startsWith("/list"))
{
os.println("*** Useri logati :***");
for(int i = 0 ;i < MultiThreadChatServer.users.size();i++)
os.println((String)MultiThreadChatServer.users.get(i));
os.println("\n");

6APLICAIE CLIENT/SERVER N JAVA

La comanda de logout se executa o serie de comenzi :

is.close(); // close output stream


os.close(); // close imput stream
clientSocket.close();//inchidem socket

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

7APLICAIE CLIENT/SERVER N JAVA

// close the output stream


// close the input stream
// close the socket
os.close();
is.close();
clientSocket.close();
} catch (IOException e) {
System.err.println("IOException:
}

" + 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);
}
}

8APLICAIE CLIENT/SERVER N JAVA

S-ar putea să vă placă și