Professional Documents
Culture Documents
Moldova
RAPORT
Lucrare de laborator nr.7
Programarea concurenta si distribuita
A efectuat:
st. gr. CR-182 Dutca Alexandru
A verificat:
lect. univ. Rotaru Lilia
Chişinău – 2020
Lucrare de laborator nr. 7
1. Tema lucrării:
Programarea reţelelor cu ajutorul thread-urilor
2. Scopul lucrării:
Însuşirea metodelor de utilizarea thread-urilor pentru aplicaţiile client-server
3. Etapele de realizare:
Codul programului(Client(Main)):
package lab.six.Client.src.sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
import java.util.Scanner;
@Override
public void start(Stage primaryStage) throws Exception{
System.out.println("Nr.clienti: ");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0; i<n;i++){
_showWindow();
}
}
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
@FXML
private void sendData(javafx.event.ActionEvent event) {
// Step 1
User u = new User();
u.setGet_response(get_response);
u.setId_of_user(response_On_Check_User);
u.setOut(out);
u.setSocket(socket);
// Step 2
Node node = (Node) event.getSource();
// Step 3
Stage stage = (Stage) node.getScene().getWindow();
stage.close();
try {
// Step 4
Parent root = FXMLLoader.load(getClass().getResource("after_login.fxml"));
// Step 5
stage.setUserData(u);
// Step 6
Scene scene = new Scene(root);
stage.setScene(scene);
// Step 7
stage.show();
} catch (IOException e) {
System.err.println(String.format("Error: %s", e.getMessage()));
}
}
public boolean isStringInt(String s)
{
try
{
Integer.parseInt(s);
return true;
} catch (NumberFormatException ex)
{
return false;
}
}
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
After_login_controller.java:
package lab.six.Client.src.sample;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
@FXML
private void receiveData(javafx.event.ActionEvent event) {
// Step 1
Node node = (Node) event.getSource();
Stage stage = (Stage) node.getScene().getWindow();
// Step 2
Controller.User u = (Controller.User) stage.getUserData();
// Step 3
socket = u.getSocket();
out=u.out;
get_response=u.get_response();
}
@FXML
private void insert(){
InsertTh th=new
InsertTh(sending_info,out,listofoperations,sumLabel,clear);
th.start();
}
@FXML
private void extract(){
ExtractTh th=new
ExtractTh(sending_info,out,listofoperations,sumLabel,clear);
th.start();
}
@FXML()
private void allOpereations() throws IOException {
allOperationsTh th=new
allOperationsTh(listofoperations,socket,out,get_response);
th.start();
}
@FXML
private void getSum() throws IOException {
out.println("getSum");
get_response=new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String allOperations=get_response.readLine();
sumLabel.setText(allOperations);
}
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
Server.java:
package lab.six.Server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
while (true){
System.out.println("wait for clients");
Socket client = listener.accept();
System.out.println("conected");
BufferedReader input=new BufferedReader(new
InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream(),true);
Server_Actions th=new Server_Actions(list, client, input, out);
th.start();
}
@Override
public void run() {
int sum=0;
String actions = "";
try {
while (true){
if(what_To_Do.equals("check_user")){
String respone = null;
try {
String check_id=request_and_info[1];
String check_password=request_and_info[2];
respone=login_validation(check_id, check_password);
} catch (ArrayIndexOutOfBoundsException e) {
respone="fields cannot be uncompletted";
}
System.out.println(respone);
out.println(respone);
}
if(what_To_Do.equals("insert")){
String forsum=request_and_info[1];
sum=sum+Integer.parseInt(forsum);
actions= actions + "+" + forsum + ",";
System.out.println(actions);
}
if(what_To_Do.equals("extract")){
String forsum=request_and_info[1];
sum=sum-Integer.parseInt(forsum);
actions= actions + "-" + forsum + ",";
System.out.println(actions);
}
if(what_To_Do.equals("allOperations")){
out.println(actions);
}
if(what_To_Do.equals("getSum")){
out.println(sum);
}
if(what_To_Do.equals("exit")){ break; }
}
}catch (NumberFormatException | IOException e){e.printStackTrace();}
}
}
Rezultatul rularii: