67% au considerat acest document util (3 voturi)
567 vizualizări18 pagini

Aplicatie Client Server Java

Aplicația verifică dacă o piesă este bună sau defectă prin citirea valorilor dintr-un fișier text sub formă de matrice. Clientul alege fișierul, introduce un procent de defecte maxim și poate vizualiza reprezentarea grafică a piesei.

Încărcat de

Ovidiu Comanescu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
67% au considerat acest document util (3 voturi)
567 vizualizări18 pagini

Aplicatie Client Server Java

Aplicația verifică dacă o piesă este bună sau defectă prin citirea valorilor dintr-un fișier text sub formă de matrice. Clientul alege fișierul, introduce un procent de defecte maxim și poate vizualiza reprezentarea grafică a piesei.

Încărcat de

Ovidiu Comanescu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 18

Universitatea din Piteti

Facultatea de Electronic, Comunicaii i


Calculatoare

Proiect
Aplicaie client-server

Profesor :
Ene Alexandru
Masterand :
Comnescu Gabriel
Mirel

2015-2016

Introducere
Aplicaii client - server
n aplicaiile client sunt implicate urmtoarele clase:

Socket

BufferedReader

PrintWriter

Pentru a seta comunicaia ntre client i server se creeaz un obiect


socket. Unui socket trebuie s i se asigure dou lucruri:

Adresa server (IP)

Portul PC

n aplicaia client se creeaz obiectul socket apoi, pe baza lui, se creeaz


cele dou obiecte care gestioneaz comunicia de date cu serverul i anume
cu obiectul BufferedReader folosit pentru a citi datele de la server i obiectul
PrintWriter folosit pentru a scrie date ctre server. Pentru a citi date se
folosete metoda readLine() i pentru a scrie date se folosete println();

2015-2016

Clasa Socket face parte din package-ul java.net . BufferedReader() i


PrintWriter() aparin package-ului java.io. Scrierea de date ctre server se
face atunci cnd se umple un buffer. Pentru a fora golirea bufferului i
scrierea imediat a datelor ctre server se foloseste metoda flush() din clasa
PrintWriter.
Metodele din cele trei clase (Socket(), BufferedReader(), PrintWriter() )
genereaz excepii obligatoriu de tratat, deci folosim blocuri try catch.
La crearea unui obiect BufferedReader(),n constructor se foloseste un
obiect InputStreamReader, ce se obine pe baza obiectului Socket.

Tema proiectului
Imaginea unei piese este coninut de un fiier .txt sub forma unor
valori de zero (0) i unu (1).
Imaginea unei piese bune trebuie s conin numai valori de 1. O
valoare de 0 indic un punct defect. Se consider c o pies este bun dac
ea are un numr de puncte defecte mai mic dect un numr specificat.
S se realizeze o aplicaie client server care verific dac o pies
este bun sau nu. De asemenea, la cererea clientului se va afia piesa n
mod grafic.
Descriere aplicaie:
Aplicatia contine 3 clase:
-

clasa Server;
clasa FirClient;
clasa Client;

2015-2016

Clasa Server este cea care este rulata prima data. Dupa ce a fost
lansata in executie, serverul va incepe listingul pe un port, in cazul nostru,
pe portul 5000.

In momentul de fata, serverul este pregatit pentru servirea clientilor.

2015-2016

Un client s-a conectat la server.


Desfasurarea actiunii:
-

clientul va alege calea fisierului .txt care contine imaginea unei piese sub
forma unor valori de zero (0) i unu (1).

2015-2016

dupa ce calea catre fisier a fost aleasa, va aparea o fereastra de dialog in


care va trebui sa introducem procentul minim de elemente zero (0)
admise in fisier.

dupa ce a fost tastat procentul minim, va aparea o noua fereasta in care


este afisat rezultatul (in functie de nr introdus in etapa anterioara).

2015-2016

rezultatul poate fi unul negativ sau pozitiv (in cazul nostru, numarul

introdus anterior este mai mare decat nr de valori 1 din fisierul .txt).
urmatorul pas este interogarea clientului; va aparea o alta fereastra de
dialog in care clientul este intrebat daca doreste vizualizarea grafica a
piesei.

clientul poate sa refuze, alegand optiunea No. In acest caz, firul


clientului va fi inchis si serverul va intra in stare de asteptare.

In cazul in care raspunsul clientului este Yes, va fi afisata urmatoarea


fereastra:

2015-2016

Culorile au urmatoarea semnificatie:


culoarea rosu reprezinta valorile de unu (1) din fisier;
culorea albastru reprezinta valorile de zero (0) din fisier.

Alte exemple:

2015-2016

2015-2016

In exemplul de mai sus am folosit un fisier cu 100 de linii si 100 de coloane.

2015-2016

Codul aplicatiei:
Clasa Client
package proiect;
import java.awt.Color;
import java.awt.GridLayout;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
*
* @author Gabi
*/
public class Client {
public static void main(String args[]) throws ClassNotFoundException {
Socket cs = null;
BufferedReader bfr = null;
PrintWriter pw = null;
try {
cs = new Socket("localhost", 5000);
InputStreamReader isr = new InputStreamReader(cs.getInputStream());

2015-2016

bfr = new BufferedReader(isr);


pw = new PrintWriter(cs.getOutputStream());
String cale = citesteCale();
pw.println(cale);
pw.flush();
double procent = Double.valueOf(bfr.readLine());
ObjectInputStream in = new ObjectInputStream(cs.getInputStream());
int a[][] = (int[][]) in.readObject();
JFrame frame = new JFrame("HELLO!");
double procentCorect = Double.valueOf(JOptionPane.showInputDialog(frame, "CARE
ESTE PROCENT MINIM ?"));
String mesaj = "";
if ((procent * 100) > procentCorect) {
mesaj = "Piesa este in parametri!";
} else {
mesaj = "Piesa nu este in parametri!";
}
JOptionPane.showMessageDialog(frame, mesaj);
int n = JOptionPane.showConfirmDialog(
frame, mesaj
+ "\n" + "Doriti sa vedeti reprezentarea grafica?",
"Rezultat",
JOptionPane.YES_NO_OPTION);
if (n == 0) {
deseneazaMatrice(a);
} else {
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();

2015-2016

} finally {
try {
cs.close();
pw.close();
bfr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static String citesteCale() {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
@Override
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".txt");
}
@Override
public String getDescription() {
return "txt files";
}
});
int r = chooser.showDialog(new JFrame(), "Alegeti fisierul!");
String cale = "Eroare";
if (r == JFileChooser.APPROVE_OPTION) {
cale = chooser.getSelectedFile().getAbsolutePath();
}
return cale;
}

2015-2016

public static void deseneazaMatrice(int a[][]) {


JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
JPanel[] board = new JPanel[100];
JPanel boardPanel = new JPanel();
boardPanel.setBackground(Color.black);
boardPanel.setLayout(
new GridLayout(a.length, a[0].length, 2, 2));
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
board[i] = new JPanel();
board[i].setBackground(Color.CYAN);
if (a[i][j] == 1) {
board[i].setBackground(Color.RED);
}
boardPanel.add(board[i]);
}
}
frame.getContentPane().add(boardPanel, "Center");
}
}

Clasa Server
package proiect;
import java.io.IOException;

2015-2016

import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
ServerSocket ss = null;
try {
ss = new ServerSocket(5000);
System.out.println("SERVERUL A PORNIT LISTINGUL PENTRU PORTUL 5000");
for (;;) {
Socket cs = ss.accept();
FirClient f = new FirClient(cs);
f.start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}

Clasa FirClient
package proiect;
import java.io.*;
import java.net.Socket;

2015-2016

import java.util.Scanner;
public class FirClient extends Thread {
private Socket cs;
private BufferedReader bfr;
private PrintWriter pw;
ObjectOutputStream out;
public FirClient(Socket cs) {
try {
this.cs = cs;
InputStreamReader isr = new InputStreamReader(cs.getInputStream());
bfr = new BufferedReader(isr);
pw = new PrintWriter(cs.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String cale;
try {
for (;;) {
cale = bfr.readLine();
int a[][] = citesteMatrice(cale);
double procent = calculeazaProcent(a);
pw.println(procent);
pw.flush();
out = new ObjectOutputStream(cs.getOutputStream());
out.writeObject(a);
}
} catch (IOException e) {
e.printStackTrace();

2015-2016

} finally {
try {
cs.close();
bfr.close();
pw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static int[][] citesteMatrice(String cale) throws FileNotFoundException {
Scanner input = new Scanner(new File(cale));
int rows = 0;
int columns = 0;
while (input.hasNextLine()) {
rows++;
Scanner colReader = new Scanner(input.nextLine());
columns = 0;
while (colReader.hasNextInt()) {
colReader.nextInt();
columns++;
}
}
int a[][] = new int[rows][columns];
input = new Scanner(new File(cale));
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (input.hasNextInt()) {
a[i][j] = input.nextInt();
}

2015-2016

}
}
return a;
}
public static double calculeazaProcent(int a[][]) {
int contor = 0;
double procent;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
if (a[i][j] == 1) {
contor++;
}
}
}
int nrTotalElemente = a.length * a[0].length;
procent = (double) contor / nrTotalElemente;
return procent;
}
}

2015-2016

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