mituri

[C](client)(zaliczenie) Sprawdzarka cen

Oct 5th, 2015
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.47 KB | None | 0 0
  1. #include <sys/socket.h>
  2. #include <arpa/inet.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <stdbool.h>
  8.  
  9. /// maksymalny rozmiar tablicy
  10. #define MAX_BUFFER 128
  11. /// maksymalny rozmiar tablicy w postaci ciagu znakow
  12. #define MAX_BUFFER_S "128"
  13. /// dlugosc kodu kreskowego
  14. #define BARCODE_LEN 6
  15.  
  16. /**
  17. * \brief Sprawdzenie czy przekazany ciag znakow to "administrator".
  18. *
  19. *Funkcja zwracajaca wartosc true, gdy przekazana wiadomosc w tablicy buffer to "Panel administratora",
  20. *\param buffer - tablica ktorej sprawdzamy zawartosc.
  21. *w przeciwnym wypadku zwraca false. Przekazujemy tablicy znakow tmp ciag "administrator" i porownujemy z przekazana
  22. *tablica buffer. Sprawdzamy czy dla indexu od 0 do 20 czy znaki w obu tablicach sie zgadzaja.
  23. */
  24. bool isAdmin(char buffer[]){
  25. char* tabTmp;
  26. tabTmp = "Panel administratora";
  27. int i;
  28. bool check = true;
  29. for(i = 0; i < 20; i++){
  30. if(buffer[i] != tabTmp[i]){
  31. check = false;
  32. }
  33. }
  34. return check;
  35. }
  36.  
  37. ////////////////////////////////////////////
  38.  
  39. /**
  40. * \brief Sprawdzarka cen - klient.
  41. *
  42. * Do naszego programy uzywamy protokolu TCP. W argumentach wywolania dostajemy adres IP na ktorym bedziemy
  43. * dzialac, port oraz wiadomosc potrzebna do wykonania kolejnej czesci programu .Tworzymy gniazdo za pomoca
  44. * funkcji socket() i inicjujemy polaczenie poprzez connect(). wysylamy do serwera nasza wiadomosc i oczekujemy
  45. * odpowiedzi i wyswietlamy jÄ…. Za pomoca funkcji isAdmin() sprawdzamy czy przekazana wiadomosc to "Panel
  46. * administratora". Jesli tak, to w petli do-while, dopoki przekazany argument to 1, 2 lub 3, wybieramy opcje
  47. * sposrod 4 ktore zostaly nam udostepnione w wiadomosci: 1.pokaz prodkuty, 2.dodaj produkt, 3. usun produkt, 4. wyjdz,
  48. * i wysylamy do serwera.
  49. *
  50. * Do wykonania 1 polecenia, otrzymujemy wiadomosc w ktorej znajduje sie zawartosc wszystkich produktow w bazie danych
  51. * i wyswietlamy je.
  52. *
  53. * Do wykonania 2 polecenia, musimy wysylac do serwera kod kreskowy, cene i nazwe produktu ktory pobieramy poprzez funkcje scanf().
  54. *
  55. * Do wykonania 3 polecenia, pobieramy kod kreskowy za pomoca cin() i wysylamy do serwera, gdzie serwer wykonuje dalsze instrukcje.
  56. *
  57. * Nastepnie zamykamy polaczenie za pomoca funkcji close().
  58. */
  59.  
  60. int main(int argc, int *argv[]){
  61.  
  62. system("clear");
  63.  
  64. struct sockaddr_in servaddr;
  65. int connectionFd;
  66. int port;
  67. char buffer[MAX_BUFFER +1];
  68. char bufferTmp[MAX_BUFFER +1];
  69.  
  70. switch(argc){
  71. 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;
  72. case 4: servaddr.sin_addr.s_addr = inet_addr(argv[1]); port = atoi(argv[2]); snprintf(buffer, MAX_BUFFER, "%s", argv[3]); break;
  73. default: fprintf(stderr,"Usage: %s <Server IP> [< Port>] <barcode>\n", argv[0]); exit(1);
  74. }
  75. printf("Wyslano kod: %s\n", buffer);
  76.  
  77. memset(&servaddr, 0, sizeof(servaddr));
  78. servaddr.sin_family = AF_INET;
  79. servaddr.sin_port = htons(port);
  80.  
  81. if ( (connectionFd = socket(PF_INET, SOCK_STREAM, 0)) < 0){
  82. perror("Socket() - nie udalo sie");
  83. exit(1);
  84. }
  85.  
  86. if ( (connect(connectionFd, (struct sockaddr*)& servaddr, sizeof(servaddr))) < 0){
  87. perror("connect() - nie udalo sie \n");
  88. exit(1);
  89. }
  90.  
  91. if( (send(connectionFd, buffer, MAX_BUFFER, 0)) < 0){
  92. perror("send() - nie udalo sie \n");
  93. exit(1);
  94. }
  95.  
  96. if( (recv(connectionFd, buffer, MAX_BUFFER, 0)) < 0){
  97. perror("recv() - nie udalo sie \n");
  98. exit(1);
  99. }
  100.  
  101. printf("Otrzymano wiadomosc: %s\n",buffer);
  102.  
  103.  
  104. char* option = malloc(MAX_BUFFER * sizeof(char));
  105. char optionChar;
  106. int optionInt;
  107. if(isAdmin(buffer)){
  108.  
  109. do{
  110. scanf("%d", &optionInt) == 1 ;
  111. snprintf(option, sizeof option, "%d", optionInt);
  112.  
  113. if( (send(connectionFd, option, MAX_BUFFER, 0)) < 0){
  114. perror("send() - nie udalo sie \n");
  115. exit(1);
  116. }
  117.  
  118. switch(optionInt){
  119. case 1:{
  120. if( (recv(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
  121. perror("recv() - nie udalo sie \n");
  122. exit(1);
  123. }
  124. system("clear");
  125. printf("%s",bufferTmp);
  126. printf("\n%s",buffer);
  127. }break;
  128. case 2:{
  129. if( (recv(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
  130. perror("recv() - nie udalo sie \n");
  131. exit(1);
  132. }
  133. system("clear");
  134. printf("%s",bufferTmp);
  135.  
  136. fgets(bufferTmp, sizeof(char) * MAX_BUFFER, stdin);
  137. scanf("%" MAX_BUFFER_S "[^\n]", bufferTmp);
  138. strcat(bufferTmp, "\n");
  139. //printf("%s\n", bufferTmp);
  140. if( (send(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
  141. perror("send() - nie udalo sie \n");
  142. exit(1);
  143. }
  144. printf("\n%s",buffer);
  145. ;break;
  146. case 3:{
  147. if( (recv(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
  148. perror("recv() - nie udalo sie \n");
  149. exit(1);
  150. }
  151. system("clear");
  152. printf("%s",bufferTmp);
  153.  
  154. fgets(bufferTmp, sizeof(char) * MAX_BUFFER, stdin);
  155. scanf("%" MAX_BUFFER_S "[^\n]", bufferTmp);
  156. strcat(bufferTmp, "\n");
  157. //printf("%s\n", bufferTmp);
  158. if( (send(connectionFd, bufferTmp, MAX_BUFFER, 0)) < 0){
  159. perror("send() - nie udalo sie \n");
  160. exit(1);
  161. };
  162.  
  163. }
  164. printf("\n%s",buffer);
  165. ;break;
  166.  
  167. default:{
  168. printf("Nie rozpoznano polecenia!\n");
  169.  
  170. };break;
  171. }
  172. }
  173. //printf("OPTIONINT: %i\n", optionInt);
  174. }while(optionInt == 1 || optionInt == 2 || optionInt == 3);
  175. }
  176.  
  177. if( (close(connectionFd)) < 0){
  178. perror("close() - nie udalo sie \n");
  179. exit(1);
  180. }
  181.  
  182. return(0);
  183. }
Advertisement
Add Comment
Please, Sign In to add comment