Proiect
Retele de Calculatoare
Profesor: dr. Timofte Carmen Manuela
Student: Cojocaru Florin-Valentin
Contents
Prezentarea proiectului din C............................................................................................ 3
1. Ce face proiectul ................................................................................................... 3
2. Program server: .................................................................................................... 3
2.1. server_tcp.c: ..................................................................................................... 3
2.2. Rularea server-ului: ........................................................................................... 5
2.3. Portul cu identificarea protocolului....................................................................... 5
2.4. Procesul ........................................................................................................... 6
3. Program client......................................................................................................... 6
3.1 client_tcp.c: ....................................................................................................... 7
Prezentarea proiectului din Python .................................................................................. 10
1. Ce face proiectul ................................................................................................... 10
2. Program server - ................................................................................................... 10
2.1. [Link] ....................................................................................................... 10
2.2. Rularea server-ului......................................................................................... 11
2.3. Portul cu identificarea protocolului .................................................................. 11
2.4. Procesul ..................................................................................................... 12
3. Program client - ................................................................................................... 12
3.1 [Link] ......................................................................................................... 12
3.2. Rularea client-ului ......................................................................................... 12
Prezentarea proiectului din C
1. Ce face proiectul
Proiectul reprezinta un sistem de comunicare client-server in limbajele C si Python.
Acesta implementeaza un server care primeste mesaje de la clienti si le afiseaza in consola.
Serverul poate primi pana la 3 mesaje de la un client inainte de a primi un semnal de la client sau
de la alt server pentru a se inchide.
2. Program server:
1. Descrierea Functionalitatii: Serverul reprezinta componenta centrala a sistemului si este
responsabil pentru gestionarea conexiunilor si a schimbului de mesaje cu clientii.
2. Functionalitatea Detaliata:
- Primirea si Trimiterea Mesajelor: Serverul primeste mesaje de la clienti si le afiseaza in
consola. De asemenea, poate trimite mesaje catre clienti, raspunzand cererilor primite.
- Gestionarea Conexiunilor: Serverul este capabil sa accepte conexiuni de la clienti si sa le
gestioneze in mod eficient.
- Inchiderea Conexiunii: Serverul poate primi un semnal pentru inchiderea conexiunii, fie de la
un client, fie de la un alt server.
2.1. server_tcp.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <signal.h>
#define PORT 8626
#define MAX_MESSAGES 3
//functie de tratare a mesajelor primite
void signal_handler(int sig) {
printf("Mesaj primit %d\n", sig); exit(0);
int main() {
int server, client;
struct sockaddr_in server_addr, client_addr; //structura pentru adresele serverului si
clientului
socklen_t client_len = sizeof(client_addr);
char buffer[256]; //buffer pentru stocarea mesajelor
//creare socket
server = socket(AF_INET, SOCK_STREAM, 0); //crearea socket TCP
if (server < 0) {
perror("Eroare la crearea socketului!"); //afisare mesaj in caz de eroare
exit(1);
//seteaza adresa si portul serverului
server_addr.sin_family = AF_INET; //familia de adrese la IPv4
server_addr.sin_port = htons(PORT); //setare port si conversia la ordinea octetilor a retelei
inet_pton(AF_INET, "[Link]", &server_addr.sin_addr); //converteste adresei IP a
serverului
//leaga socketul la adresa si port
if (bind(server, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("Eroare");
close(server); //inchide socketul in caz daca are eroare
exit(1);
2.2. Rularea server-ului:
2.3. Portul cu identificarea protocolului
2.4. Procesul
3. Program client
3. Descrierea Functionalitatii: Clientul reprezinta o entitate individuala care se conecteaza la
server si trimite sau primeste mesaje.
4. Functionalitatea Detaliata:
- Conectarea la Server: Clientul se conecteaza la server utilizand adresa IP si portul specificate.
- Trimiterea de Mesaje: Utilizatorul poate introduce mesaje in consola, iar clientul le trimite
serverului pentru procesare.
- Primirea de Mesaje: Clientul primeste si afiseaza mesajele primite de la server.
- Semnal de Inchidere: Clientul poate trimite un semnal catre server pentru a indica incheierea
comunicatiei.
5. Integrarea Sistemului:
- Proiectul este structurat intr-un director specific si este insotit de documentatia
corespunzatoare.
- Documentatia cuprinde detalii despre functionalitatea sistemului, instructiuni de utilizare si
detalii de implementare.
- Sistemul este disponibil pentru descarcare pe platforma [Link] si este publicat online,
facilitand accesul si utilizarea sa.
3.1 client_tcp.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8626
#define MAX_MESSAGES 3
#define BUFFER_SIZE 256
int main() {
int client;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
//creare socket
client = socket(AF_INET, SOCK_STREAM, 0);
if (client < 0) {
perror("Eroare la crearea de socket"); //afisare eroare
exit(1); //exit in caz de eroare
//setare adresa si port
server_addr.sin_family = AF_INET; //familia de adrese la IPv4
server_addr.sin_port = htons(PORT); //setare port si conversia in ordinea octetilor a
retelei
inet_pton(AF_INET, "[Link]", &server_addr.sin_addr); //conversia adresei IP in
format binar
//conectare la server
if (connect(client, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { //verificarea
erorilor de conectare
perror("Eroare la conectare");
close(client);
exit(1);
printf("S-a conectat la server cu succes! \n");
int messages_sent = 0;
while (messages_sent < MAX_MESSAGES) {
printf("Introduceti mesaj %d: ", messages_sent + 1);
fgets(buffer, BUFFER_SIZE, stdin); //citirea mesajului de la intrare
buffer[strcspn(buffer, "\n")] = 0; //eliminare \n
int bytes_written = write(client, buffer, strlen(buffer)); //scriere mesaj catre server
if (bytes_written < 0) {
perror("Eroare la scrierea mesajului");
close(client);
exit(1);
printf("Mesaj trimis: %s\n", buffer);
messages_sent++;
}
//trimite mesaj de exit catre server
strcpy(buffer, "exit"); //copiaza mesajul de exit in buffer
write(client, buffer, strlen(buffer));
close(client);
return 0;
3.2 Rularea clientului
Prezentarea proiectului din Python
1. Ce face proiectul
1. Initializarea serverului:
Este create un server folosind [Link](socket.AF_INET, socket.SOCK_STREAM), unde
socket.AF_INET indica utilizarea familiei de adrese IPv4, iar socket.SOCK_STREAM indica
utilizarea protocolului TCP.
Serverul este legat la o adresa IP si un port specificat: server_socket.bind('[Link]',
8626).
2. Ascultarea conexiunilor:
Serverul asculta conexiuni noi: server_socket.listen(3) si permite unui numar maxim de 3
conexiuni in queue.
3. Acceptarea conexiunilor:
Cand un client se conecteaza serverul accepta conexiunea folosind conexiune, adresa =
server_socket.accept(), obtinand un obiect de conexiune (conexiune) si adresa clientului
(adresa).
4. Receptionarea si manipularea datelor:
Serverul primeste date de la client: [Link](1024) cu dimensiunea maxima a datelor
primite. Datele sunt apoi decodificate si afisate.
5. Inchiderea conexiunii:
Dupa ce serverul primeste datele conexiunea se inchide: [Link]().
2. Program server -
2.1. [Link]
import socket
def server():
server_socket = [Link](socket.AF_INET, socket.SOCK_STREAM) #se creeaza un
obiect de tip socket pentru server
server_socket.bind(('[Link]', 8626)) #se conecteaza serverul la adresa si port
server_socket.listen(3) #portul se asculta pentru un queue de maxim 3 conexiuni
conexiune, adresa = server_socket.accept() #se accepta o conexiune de la un client si se
obtine obiectul de conexiune si adresa clientului conectat
print(f"Conexiune la adresa si portul: {adresa}")
count = 0
while count < 3:
data = [Link](1024).decode() #se primesc date de la client cu o
dimensiune maxima de 1024 de bytes se decodeaza in binar si dupa in test
print(f"Mesaj primit: {data}")
count+= 1
print(f"Numarul de mesaje primite: {count}")
[Link]()
2.2. Rularea server-ului
2.3. Portul cu identificarea protocolului
2.4. Procesul
3. Program client -
3.1 [Link]
import socket
def client():
client_socket = [Link](socket.AF_INET, socket.SOCK_STREAM) #se creeaza un
obiect de tip socket pentru client
client_socket.connect(('[Link]', 8626)) #se conecteaza clientul la adresa si port
for i in range(3):
mesaj = input("Mesaj de la client") #mesajul care va fi trimis ctre server
client_socket.send([Link]()) #se codifica mesajul si se trimite catre server
print("Mesaj trimis catre server")
client_socket.close()
client()
3.2. Rularea client-ului