Sunteți pe pagina 1din 11

Academia de Studii Economice

Facultatea Cibernetica, Statistica si Informatica Eonomica

PROIECT - RETELE DE
CALCULATOARE

STUDENT:

PROFESOR INDRUMATOR:

Ene Gabriela

Conf. Dr. Carmen Timofte

I.

Definirea problemei:

Comunicarea pe internet este bazata pe o pereche de protocoale numite : Internet


Protocol si Transmission Control Protocol, recunoscuta ca TCP/IP.
Pentru ca doua programe sa comunice folosind TCP/IP, fiecare program trebuie sa creeze un
socket, iar acestea trebuie sa fie conectate. Odata ce conexiunea este facuta, comunicarea se face
folosind transferul de date (input si output).
TCP asigura un serviciu orientat pe conexiune pentru transmisia fiabila a datelor, cu
detectarea erorilor si controlul fluxului, si detine un mecanism de validare n 3 faze, acestea
fiind:
stabilirea conexiunii (handshaking)
transferul datelor
eliberarea conexiunii
Programul care creeaza un socket ce asculta pentru cereri se numeste server, iar socketul aferent server-socket. Programul care se conecteaza la server se numeste client, iar socket-ul
folosit pentru a crea conexiunea se numeste socket-client. Acest lucru poarta denumirea de
model client/server .

In multe aplicatii, server-ul poate accepta conexiuni la mai multi client. Cand un client se
conecteaza la socket-ul unui server, acel socket continua sa asculte. Server-ul are un fir
principal(thread) care directioneaza socket-ul de ascultare al server-ului. Acest main thread
functioneaza pe toata durata de executie a programului. Cand acesta primeste o cerere de
conexiune de la un client, firul principal creeaza un nou fir pentru a se ocupa de conexiunea cu
acel client. Acest fir va functiona doar pe perioada in care clientul sta conectat. Thread-ul
serverului si thread-urile create pentru client functioneaza simultan, in paralel.

Enuntul problemei:
Am implementat un sistem server-client. Clientul primeste un numar intreg de la
utilizator, se stabileste conexiunea la server, iar numarul este transmis folosind transferul de date
(data streams input si output).

Severul preia valoarea si o prelucreaza. La nivelul lui se stabileste daca numarul este
prim si trimite inapoi clientului(applet-ului) raspunsul (afirmativ/negativ).
Programul Java foloseste socket-uri destinate pentru a realiza comunicarea intre client si
server. Server-ul asteapta si asculta socket-ul pentru a vedea care este cererea primita din
partea clientului.
Clientul cunoste hostname-ul si portul pe care serverul asculta. De asemenea, client-ul trebuie
sa se identifice atunci cand trimite cereri server-ului, si se leaga de un port local, asignat de
sistem. Am folosita clasa Applet pentru a realiza interfata de afisare, iar aceasta clasa permite
includerea aplicatiei si intr-o pagina Web si pentru realizarea usoara a interfetei grafice.

Odata conexiunea realizata, server-ul se leaga la portul local al clientului iar pe partea de client
se creeaza un nou socket folosit pentru transmiterea datelor catre server.
Acum, clientul si serverul pot comunica scriind sau citind date cu ajutorul socket-urilor.
Java suporta doua tipuri de socket-uri:
-stream (bazat pe TCP/IP)
-datagram
Socket-ul stream este cel pe care l-am folosit in aceasta aplicatie. In clasa server, am definit un
nou socket, care foloseste portul 8765. Serverul trebuie sa accepte o conexiune.
ServerSocket serverSocket = new ServerSocket(8765);
Socket clientSocket = serverSocket.accept();
Client Trimitere Date .
Apoi, voi folosi transferul de date ca sa realizez comunicare dintre server si client. Clientul
trimite un numar preluat din TextField catre server cand este apasat butonul Send. Am folosit
un event pentru a genera acest lucru la apasarea butonului .
int numb = 0;
String numbStr = null;
BufferedReader fromServer = null;
PrintWriter toServer = null;
String actionCommand = e.getActionCommand();
if (e.getSource() instanceof Button)
if (actionCommand.equals("Send"))
{
try
{

numb = Integer.parseInt(numbField.getText())}
catch (NumberFormatException ex)
{System.out.println("Number Format Exception");
}
Valoarea din TextField este pastrata intr-o variabila numb
int numb = 0;
...
numb = Integer.parseInt(numbField.getText());
.Folosesc metoda printWriter pentru a trimite valoarea catre server.
PrintWriter toServer = null;
...
toServer = new PrintWriter(socket.getOutputStream(),
true);
Socket-ului ce corespunde serverului o sa ii cer outputstream pentru a genera printwriter.
Trimit valoarea prin:
toServer.println(numb);

Server: Primire
public class BufferedReader
extends Reader
Serverul foloseste clasa BufferedReader ca sa citeasca eficient inputul trimis de client.
BufferedReader fromClient = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
Deoarece data trimisa de client este un intreg, il convertesc la tipul Integer.
Am folosit un output de control, ca sa verifica daca server-ul primeste sau nu valoarea.
System.out.println("received: " + numb.intValue());

Server: Trimitere
Pe partea de server se verifica mai intai daca numarul primit este prim si returneaza raspunsul
clientului.

Din nou, am folosit PrintWriter ca sa trimit date.


PrintWriter toClient = new PrintWriter(clientSocket.getOutputStream(), true);
PrintWriter scrie pe stream-ul de output ai conexiunii socket catre client folosind println method;
toClient.println(numb.intValue()+1);

Client : Primire
In cele din urma, clientul trebuie sa citeasca si sa interpreteze raspunul dat de server. La fel ca la
server, am folosit buffered reader.
BufferedReader fromServer = null;
...
fromServer = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
...
numbStr = fromServer.readLine();
Setez valoarea label-ului cu raspunsul primit.

Codul intreg :
Clasa Server :

Clasa Client :

Testare process si port:

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