Advertisement
leonard007

Untitled

Dec 13th, 2023
1,173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <arpa/inet.h>
  6. #include <sys/socket.h>
  7. #include <sys/types.h>
  8. #include <netinet/in.h>
  9. #include <pthread.h>
  10.  
  11. #define PORT 8080
  12. #define MAX_CLIENTS 5
  13.  
  14. void *handle_client(void *arg) {
  15.     int client_socket = *((int *)arg);
  16.     char menu[] = "1. Specificatii CPU\n2. Specificatii Memorie\n3. Listare dispozitive PCI\nAlegere: ";
  17.     char buffer[1024] = {0};
  18.     char response[1024] = {0};
  19.     int choice;
  20.  
  21.     // Trimitem meniul către client
  22.     send(client_socket, menu, strlen(menu), 0);
  23.     recv(client_socket, buffer, sizeof(buffer), 0);
  24.     choice = atoi(buffer);
  25.  
  26.     // Verificăm opțiunea aleasă de client și trimitem informațiile corespunzătoare
  27.     FILE *fp;
  28.     switch (choice) {
  29.         case 1:
  30.             fp = popen("cat /proc/cpuinfo", "r");
  31.             break;
  32.         case 2:
  33.             fp = popen("cat /proc/meminfo", "r");
  34.             break;
  35.         case 3:
  36.             fp = popen("lspci", "r");
  37.             break;
  38.         default:
  39.             printf("Optiune invalida.\n");
  40.             close(client_socket);
  41.             pthread_exit(NULL);
  42.     }
  43.  
  44.     // Citim informațiile din comandă și le trimitem clientului
  45.     while (fgets(response, sizeof(response), fp) != NULL) {
  46.         send(client_socket, response, strlen(response), 0);
  47.     }
  48.  
  49.     pclose(fp);
  50.     close(client_socket);
  51.     pthread_exit(NULL);
  52. }
  53.  
  54. int main() {
  55.     int server_socket, client_socket, addr_size;
  56.     struct sockaddr_in server_addr, client_addr;
  57.     pthread_t tid[MAX_CLIENTS];
  58.  
  59.     // Creare socket
  60.     if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
  61.         perror("Socket creation failed");
  62.         exit(EXIT_FAILURE);
  63.     }
  64.  
  65.     // Setare structura de adresa a serverului
  66.     server_addr.sin_family = AF_INET;
  67.     server_addr.sin_addr.s_addr = INADDR_ANY;
  68.     server_addr.sin_port = htons(PORT);
  69.  
  70.     // Legare
  71.     if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
  72.         perror("Binding failed");
  73.         exit(EXIT_FAILURE);
  74.     }
  75.  
  76.     // Ascultare pentru conexiuni
  77.     if (listen(server_socket, MAX_CLIENTS) < 0) {
  78.         perror("Listening failed");
  79.         exit(EXIT_FAILURE);
  80.     }
  81.  
  82.     printf("Serverul este activ. Astept clienti...\n");
  83.  
  84.     int i = 0;
  85.     while (1) {
  86.         addr_size = sizeof(client_addr);
  87.  
  88.         // Acceptare conexiune
  89.         if ((client_socket = accept(server_socket, (struct sockaddr *)&client_addr, (socklen_t *)&addr_size)) < 0) {
  90.             perror("Acceptance failed");
  91.             exit(EXIT_FAILURE);
  92.         }
  93.  
  94.         printf("Clientul conectat\n");
  95.  
  96.         // Creare fir de execuție pentru fiecare client
  97.         if (pthread_create(&tid[i++], NULL, handle_client, (void *)&client_socket) != 0) {
  98.             perror("Thread creation failed");
  99.             exit(EXIT_FAILURE);
  100.         }
  101.  
  102.         // Limitare la MAX_CLIENTS
  103.         if (i >= MAX_CLIENTS) {
  104.             i = 0;
  105.             while (i < MAX_CLIENTS) {
  106.                 pthread_join(tid[i++], NULL);
  107.             }
  108.             i = 0;
  109.         }
  110.     }
  111.  
  112.     return 0;
  113. }
  114.  
  115. #include <stdio.h>
  116. #include <stdlib.h>
  117. #include <string.h>
  118. #include <unistd.h>
  119. #include <arpa/inet.h>
  120. #include <sys/socket.h>
  121.  
  122. #define PORT 8080
  123.  
  124. int main() {
  125.     int client_socket;
  126.     struct sockaddr_in server_addr;
  127.     char buffer[1024] = {0};
  128.  
  129.     // Creare socket
  130.     if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  131.         perror("Socket creation failed");
  132.         exit(EXIT_FAILURE);
  133.     }
  134.  
  135.     server_addr.sin_family = AF_INET;
  136.     server_addr.sin_port = htons(PORT);
  137.  
  138.     // Conectare la server
  139.     if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
  140.         perror("Invalid address/ Address not supported");
  141.         exit(EXIT_FAILURE);
  142.     }
  143.  
  144.     if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
  145.         perror("Connection failed");
  146.         exit(EXIT_FAILURE);
  147.     }
  148.  
  149.     // Primirea meniului de la server
  150.     recv(client_socket, buffer, sizeof(buffer), 0);
  151.     printf("Meniu:\n%s\n", buffer);
  152.  
  153.     printf("Alege optiune: ");
  154.     int choice;
  155.     scanf("%d", &choice);
  156.     send(client_socket, &choice, sizeof(choice), 0);
  157.  
  158.     // Recepționarea și afișarea informațiilor de la server
  159.     while (recv(client_socket, buffer, sizeof(buffer), 0) > 0) {
  160.         printf("%s", buffer);
  161.     }
  162.  
  163.     close(client_socket);
  164.  
  165.     return 0;
  166. }
  167.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement