Advertisement
leonard007

Untitled

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