Guest User

Client2Server

a guest
Nov 25th, 2012
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.16 KB | None | 0 0
  1. //SERVER:
  2.  
  3.     #include "windows.h"
  4.     #include "stdio.h"
  5.  
  6.     struct Mesaj {
  7.         int numar[20];
  8.         int lungime;
  9.     };
  10.  
  11.     struct Rezultat {
  12.         int min;
  13.         int max;
  14.     };
  15.  
  16.     void minMax (Mesaj mesaj, int &min, int &max) {
  17.    
  18.         for (int i = 0; i < mesaj.lungime; i++) {
  19.             if (mesaj.numar[i] > max)
  20.                 max = mesaj.numar[i];
  21.             if (mesaj.numar[i] < min)
  22.                 min = mesaj.numar[i];
  23.         }
  24.     }
  25.  
  26.     int main () {
  27.    
  28.         HANDLE inputPipe, outputPipe;
  29.         Mesaj mesaj;
  30.  
  31.         printf("Initiez piepeurile si mesajul\n");
  32.  
  33.         while (true) {
  34.  
  35.             printf("Creez pipe\n");
  36.  
  37.             inputPipe = CreateNamedPipe ("\\\\.\\pipe\\Client2Server", 
  38.                              PIPE_ACCESS_INBOUND,          
  39.                              PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
  40.                              PIPE_UNLIMITED_INSTANCES,     
  41.                              0,
  42.                              sizeof(Mesaj),
  43.                              0,                            
  44.                              NULL);                        
  45.         printf("Pipe creat\n");
  46.  
  47.         ConnectNamedPipe (inputPipe,NULL);
  48.        
  49.         printf("Cineva s-a conectat la server\n");
  50.        
  51.         ReadFile (inputPipe, &mesaj,sizeof(Mesaj),NULL,NULL);  
  52.  
  53.         printf("Server citeste mesaj\n");
  54.  
  55.         FlushFileBuffers(inputPipe);
  56.         DisconnectNamedPipe(inputPipe);
  57.         CloseHandle(inputPipe);
  58.  
  59.         int min = 0;
  60.         int max = 0;
  61.  
  62.         minMax (mesaj, min, max);
  63.  
  64.         Rezultat rezultat;
  65.         rezultat.max = max;
  66.         rezultat.min = min;
  67.  
  68.         outputPipe = CreateFile ("\\\\.\\pipe\\Server2Client", 
  69.                     GENERIC_READ | GENERIC_WRITE,  
  70.                     0,
  71.                     NULL,
  72.                     CREATE_ALWAYS,         
  73.                     0,             
  74.                     NULL);         
  75.  
  76.         WriteFile (outputPipe, &rezultat, sizeof(Rezultat),NULL,NULL);
  77.  
  78.         CloseHandle(outputPipe);
  79.  
  80.     }
  81.  
  82.     return 0;
  83. }
  84.  
  85.  
  86. //Client:
  87.  
  88. #include "windows.h"
  89. #include "stdio.h"
  90.  
  91. struct Mesaj {
  92.     int numar[20];
  93.     int lungime;
  94. };
  95.  
  96. struct Rezultat {
  97.     int min;
  98.     int max;
  99. };
  100.  
  101.  
  102. int main () {
  103.  
  104.     HANDLE outputPipe, inputPipe;
  105.  
  106.     printf ("Clientul initiaza pipeurile\n");
  107.  
  108.     Mesaj mesaj;
  109.  
  110.     printf("Mesaj initializat, citim mesaj\n");
  111.  
  112.     printf("Lungime: ");
  113.     scanf_s ("%d", &mesaj.lungime);
  114.  
  115.  
  116.     for(int i=0; i<mesaj.lungime; i++)
  117.         scanf("%d", &mesaj.numar[i]);
  118.  
  119.     printf("Client creaza pipe pentru a se conecta la server\n");
  120.  
  121.     // Creaza UN PIPE
  122.     outputPipe = CreateFile ("\\\\.\\pipe\\Client2Server", 
  123.                 GENERIC_WRITE,                 
  124.                 0,                 
  125.                 NULL,
  126.                 CREATE_ALWAYS,
  127.                 0,
  128.                 NULL);
  129.  
  130.     printf("Client scrie mesaj\n");
  131.  
  132.     // Scrie mesajul
  133.     try {WriteFile (outputPipe, &mesaj, sizeof(Mesaj), NULL, NULL);}
  134.     catch(int e) {
  135.         printf("%d, Error: %d", GetLastError, e);
  136.     }
  137.  
  138.     printf("Mesajul a fost scris\n");
  139.  
  140.     CloseHandle(outputPipe);
  141.  
  142.     inputPipe = CreateNamedPipe ("\\\\.\\pipe\\Server2Client",   // Client citeste din outputul serverului
  143.                                 PIPE_ACCESS_INBOUND,
  144.                                 PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
  145.                                 PIPE_UNLIMITED_INSTANCES,
  146.                                 0,
  147.                                 sizeof(Rezultat),
  148.                                 0,
  149.                                 NULL);
  150.  
  151.     // Asteptam sa trimita serverul un rezultat
  152.     ConnectNamedPipe (inputPipe, NULL);
  153.  
  154.     Rezultat rezultat;
  155.  
  156.     ReadFile(&inputPipe, &rezultat, sizeof(Rezultat), NULL, NULL);
  157.  
  158.     printf("Maximul este: %d \n", rezultat.max);
  159.     printf("Minimul este: %d \n", rezultat.min);
  160.  
  161.     // Acum distrugem pipe-ul
  162.     FlushFileBuffers(inputPipe);
  163.     DisconnectNamedPipe(inputPipe);
  164.     CloseHandle(inputPipe);
  165. }
Advertisement
Add Comment
Please, Sign In to add comment