Documente Academic
Documente Profesional
Documente Cultură
calculatoare
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:
1. stabilirea conexiunii (handshaking)
2. transferul datelor
3. eliberarea conexiunii
Programul care creeaza un socket ce asculta pentru cereri se numeste server, iar
socket-ul 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 client server in limbajul de programare C, programul
putand fi folosit pe Linux. Odata ce clientul este conectat si trimite adresa IP
serverului, acesta din urma trimite data si ora clientului.
Textul sursa (in C pentru Linux) pentru un server care asteapta conectarea unui
client si trimite data si ora curenta.
Modul ServerTCP
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
Familia de
Tip intreg pe 4
octeti
while(1)
Nr maxim de
clienti conectati
{
//se apeleaza functia accept() pentru a accepta o cerere de conectare si pentru a se crea
un socket nou pentru aceasta conectare
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
ticks = time(NULL);
snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks));
write(connfd, sendBuff, strlen(sendBuff));
//functia close() distruge socket-ul pentru eliberarea resurselor ocupate de socket
close(connfd);
sleep(1);
}
}
{
printf("\n Usage: %s <ip server> \n",argv[0]);
return 1;
}
memset(recvBuff, '0',sizeof(recvBuff));
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("\n Eroare la crearea socket-ului \n");
return 1;
}
}
if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
printf("\n Eroare la obtinerea conexiunii \n");
return 1;
}
if(n < 0)
{
printf("\n Eroare la receptie \n");
}
return 0;
}