Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <stdbool.h>
- /// maksymalny rozmiar tablicy
- #define MAX_BUFFER 128
- /// maksymalny rozmiar tablicy w postaci ciagu znakow
- #define MAX_BUFFER_S "128"
- /// dlugosc kodu kreskowego
- #define BARCODE_LEN 6
- /**
- * \brief Sprawdzenie czy przekazany ciag znakow to "administrator".
- *
- *Funkcja zwracajaca wartosc true, gdy przekazana wiadomosc w tablicy buffer to "Panel administratora",
- *\param buffer - tablica ktorej sprawdzamy zawartosc.
- *w przeciwnym wypadku zwraca false. Przekazujemy tablicy znakow tmp ciag "administrator" i porownujemy z przekazana
- *tablica buffer. Sprawdzamy czy dla indexu od 0 do 20 czy znaki w obu tablicach sie zgadzaja.
- */
- bool isAdmin(char buffer[]){
- char* tabTmp;
- tabTmp = "Panel administratora";
- int i;
- bool check = true;
- for(i = 0; i < 20; i++){
- if(buffer[i] != tabTmp[i]){
- check = false;
- }
- }
- return check;
- }
- ////////////////////////////////////////////
- /**
- * \brief Sprawdzarka cen - klient.
- *
- * Do naszego programy uzywamy protokolu TCP. W argumentach wywolania dostajemy adres IP na ktorym bedziemy
- * dzialac, port oraz wiadomosc potrzebna do wykonania kolejnej czesci programu .Tworzymy gniazdo za pomoca
- * funkcji socket() i inicjujemy polaczenie poprzez connect(). wysylamy do serwera nasza wiadomosc i oczekujemy
- * odpowiedzi i wyswietlamy jÄ…. Za pomoca funkcji isAdmin() sprawdzamy czy przekazana wiadomosc to "Panel
- * administratora". Jesli tak, to w petli do-while, dopoki przekazany argument to 1, 2 lub 3, wybieramy opcje
- * sposrod 4 ktore zostaly nam udostepnione w wiadomosci: 1.pokaz prodkuty, 2.dodaj produkt, 3. usun produkt, 4. wyjdz,
- * i wysylamy do serwera.
- *
- * Do wykonania 1 polecenia, otrzymujemy wiadomosc w ktorej znajduje sie zawartosc wszystkich produktow w bazie danych
- * i wyswietlamy je.
- *
- * Do wykonania 2 polecenia, musimy wysylac do serwera kod kreskowy, cene i nazwe produktu ktory pobieramy poprzez funkcje scanf().
- *
- * Do wykonania 3 polecenia, pobieramy kod kreskowy za pomoca cin() i wysylamy do serwera, gdzie serwer wykonuje dalsze instrukcje.
- *
- * Nastepnie zamykamy polaczenie za pomoca funkcji close().
- */
- int main(int argc, int *argv[]){
- system("clear");
- struct sockaddr_in servaddr;
- int connectionFd;
- int port;
- char buffer[MAX_BUFFER +1];
- char bufferTmp[MAX_BUFFER +1];
- switch(argc){
- case 3: servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); port = atoi(argv[1]); snprintf(buffer, MAX_BUFFER, "%s", argv[2]); break;
- case 4: servaddr.sin_addr.s_addr = inet_addr(argv[1]); port = atoi(argv[2]); snprintf(buffer, MAX_BUFFER, "%s", argv[3]); break;
- default: fprintf(stderr,"Usage: %s <Server IP> [< Port>] <barcode>\n", argv[0]); exit(1);
- }
- printf("Wyslano kod: %s\n", buffer);
- memset(&servaddr, 0, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_port = htons(port);
- if ( (connectionFd = socket(PF_INET, SOCK_STREAM, 0)) < 0){
- perror("Socket() - nie udalo sie");
- exit(1);
- }
- if ( (connect(connectionFd, (struct sockaddr*)& servaddr, sizeof(servaddr))) < 0){
- perror("connect() - nie udalo sie \n");
- exit(1);
- }
- if( (send(connectionFd, buffer, MAX_BUFFER, 0)) < 0){
- perror("send() - nie udalo sie \n");
- exit(1);
- }
- if( (recv(connectionFd, buffer, MAX_BUFFER, 0)) < 0){
- perror("recv() - nie udalo sie \n");
- exit(1);
- }
- printf("Otrzymano wiadomosc: %s\n",buffer);
- char* option = malloc(MAX_BUFFER * sizeof(char));
- char optionChar;
- int optionInt;
- if(isAdmin(buffer)){
- do{
- scanf("%d", &optionInt) == 1 ;
- snprintf(option, sizeof option, "%d", optionInt);
- if( (send(connectionFd, option, MAX_BUFFER, 0)) < 0){
- perror("send() - nie udalo sie \n");
- exit(1);
- }
- switch(optionInt){
- case 1:{
- if( (recv(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
- perror("recv() - nie udalo sie \n");
- exit(1);
- }
- system("clear");
- printf("%s",bufferTmp);
- printf("\n%s",buffer);
- }break;
- case 2:{
- if( (recv(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
- perror("recv() - nie udalo sie \n");
- exit(1);
- }
- system("clear");
- printf("%s",bufferTmp);
- fgets(bufferTmp, sizeof(char) * MAX_BUFFER, stdin);
- scanf("%" MAX_BUFFER_S "[^\n]", bufferTmp);
- strcat(bufferTmp, "\n");
- //printf("%s\n", bufferTmp);
- if( (send(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
- perror("send() - nie udalo sie \n");
- exit(1);
- }
- printf("\n%s",buffer);
- ;break;
- case 3:{
- if( (recv(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
- perror("recv() - nie udalo sie \n");
- exit(1);
- }
- system("clear");
- printf("%s",bufferTmp);
- fgets(bufferTmp, sizeof(char) * MAX_BUFFER, stdin);
- scanf("%" MAX_BUFFER_S "[^\n]", bufferTmp);
- strcat(bufferTmp, "\n");
- //printf("%s\n", bufferTmp);
- if( (send(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
- perror("send() - nie udalo sie \n");
- exit(1);
- };
- }
- printf("\n%s",buffer);
- ;break;
- default:{
- printf("Nie rozpoznano polecenia!\n");
- };break;
- }
- }
- //printf("OPTIONINT: %i\n", optionInt);
- }while(optionInt == 1 || optionInt == 2 || optionInt == 3);
- }
- if( (close(connectionFd)) < 0){
- perror("close() - nie udalo sie \n");
- exit(1);
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment