SHARE
TWEET

Untitled

a guest Nov 15th, 2019 93 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*****************************************************************
  2.  
  3.     --> server-uni.c
  4.  
  5.     Module d'utilisation d'un serveur connexion unique via un socket TCP sur Unix
  6.  
  7.     Stevens Gagnon
  8.     Departement Informatique
  9.     College Shawinigan
  10.  
  11. ******************************************************************/
  12.  
  13.     #define MAX_BUFFER 100
  14.     #define TX_TIMEOUT 0
  15.     #define RX_TIMEOUT 0
  16.  
  17. // ---- Parametres specifique au serveur
  18.  
  19.     #define ADR_LISTEN  "INADDR_ANY"        // "INADDR_ANY" ou "192.168.2.2"
  20.     #define PORT_NET  32150              /* Port sur lequel le serveur attend */
  21.  
  22.  
  23. /* ------------------------------------------------------------- */
  24.  
  25. #include "sg_tcp.h"
  26.  
  27. //---------------------------------------------------------------- main
  28.  
  29. int
  30. main()
  31. {
  32.     int         i;
  33.     int         serveur;
  34.     int         client;
  35.     int         compt, status, nbpaquet;
  36.     char        buffer_in[MAX_BUFFER+1];
  37.     char        buffer_out[MAX_BUFFER+1];
  38.  
  39.     int         n, lg;
  40.  
  41.     buffer_in[MAX_BUFFER] = 0;
  42.     buffer_out[MAX_BUFFER] = 0;
  43.  
  44.     FILE *U_Tx;
  45.     U_Tx = fopen("prog", "r");
  46.    
  47.     if( U_Tx == NULL)  
  48.         {
  49.                 printf("--------------------- Probleme de fichier\n");
  50.                 return 0;
  51.         }
  52. printf("\n---------------- ");
  53.     serveur = setup_tcp_serveur(ADR_LISTEN, PORT_NET, MAX_BUFFER, TX_TIMEOUT, RX_TIMEOUT);
  54.     if ( serveur != -1 )
  55.     {
  56.         client = accept_tcp_client(serveur);
  57.         close(serveur);
  58.     }
  59.  
  60.     if ( client != -1)
  61.     {
  62.         printf("\n---------------- ");
  63.         prt_IP( client );
  64.         printf(" ----------------\n");
  65.  
  66.         bzero(buffer_in,MAX_BUFFER);
  67.  
  68.         lg = recv(client,buffer_in,MAX_BUFFER, 0);      // reception
  69.         if (lg < 0)
  70.         {
  71.             perror("\n\nERREUR read\n\n");
  72.         }
  73.         else
  74.         {
  75.             //printf("\nDatagram recu: \nLongueur(%i) \n-->%s<--\n\n", lg, buffer_in);
  76.             do
  77.             {
  78.                 MAX_BUFFER = 100;
  79.                 bzero(buffer_out,MAX_BUFFER);
  80.                 compt = 0;
  81.  
  82.                 //Remplir le paquetTx
  83.                 while ((compt < MAX_BUFFER) && (status != EOF))
  84.                 {
  85.                     status = fscanf(U_Tx, "%1c", &buffer_out[compt]);
  86.                     compt++;
  87.                 }
  88.                 //snprintf( buffer_out, MAX_BUFFER, ")%s(", buffer_in );
  89.                 lg = compt;                    
  90.                 //printf("-->Serveur transmet %i bytes ==>>%s<<==", lg, buffer_out);
  91.                 printf("\nPaquet transmit: \nLongueur(%i) \n\n", lg+2, buffer_out);
  92.  
  93.                 n = send(client,buffer_out,strlen( buffer_out ), 0);    // Transmission
  94.                 if (n < 0) perror("\n\nERREUR write\n\n");
  95.                 printf("Transmission de %i byte terminee", lg);//ou ajouter +2??
  96.                
  97.                 // strlen() = Retourne la longueur du CONTENU, pas de la BOITE"
  98.                 // ne fonctionne que avec de STRING !
  99.                 // IMPOSSIBLE d'utiliser avec du BINAIRE.
  100.             } while (status != EOF);
  101.  
  102.                 //(ok) Transmet le paquet en NULL pour signifier la fin
  103.                 bzero(buffer_out,MAX_BUFFER+1);      //Mettre des NULL dans tout les place de paquetTx
  104.                 lg = strlen(buffer_out);       //calcule longeur de buffer_out
  105.                 //printf("\n-->Serveur transmet %i bytes ==>>%s<<== (la fin)", lg, buffer_out);
  106.                 //printf("\n     ->TO: ");
  107.                // prt_sockaddr_in(client);
  108.                 //id = socket2id(client);
  109.                 //printf("     ->socket2id = %12lX\n", id);
  110.  
  111.                 n = send(client,buffer_out,strlen( buffer_out ), 0);    // Transmission
  112.                 if (n < 0) perror("\n\nERREUR write\n\n");
  113.                 printf("Transmission de %i byte terminee", lg);//ou ajouter +2??
  114.                 printf("\n --> Fin prog (%i paquets envoy√©s)\n", nbpaquet);
  115.         }
  116.         close(client);
  117.     }
  118. }
  119.  
  120. /*********************************************************************************************************************************/
  121.  
  122. /*****************************************************************
  123.  
  124.     --> client-1234.c
  125.  
  126.     Module d'utilisation d'un client via un socket TCP sur Unix
  127.  
  128.     Stevens Gagnon
  129.     Departement Informatique
  130.     College Shawinigan
  131.  
  132. ******************************************************************/
  133.  
  134.     #define MAX_BUFFER 100
  135.     #define TX_TIMEOUT 0
  136.     #define RX_TIMEOUT 0
  137.  
  138. // ---- Parametres specifique au serveur
  139.  
  140.    #define ADR_SERVER  "amx.xoox.ca"    // "amx.xoox.ca"  -ou-  "234.12.24.2"
  141.    #define PORT_NET  32150                  // Port sur lequel le serveur attend
  142.  
  143. /* ------------------------------------------------------------- */
  144.  
  145. #include "sg_tcp.h"
  146.  
  147. //-------------------------------------------------------------------------------------- main
  148.  
  149. int main()
  150. {
  151.     char buffer[MAX_BUFFER+1];
  152.     int client;
  153.     int n, lg, lg_recu,lg_tx;
  154. /**************************************************/
  155.     int status, compteur;
  156.     int nbPack_send = 0;
  157.     char buffer_out[MAX_BUFFER+1];
  158.     char buffer_in[MAX_BUFFER+1];
  159.    
  160.     FILE *fichier;
  161.     fichier = fopen("prog", "w");
  162.    
  163.     if( fichier == NULL)   
  164.     {
  165.         printf("--------------------- Probleme de fichier\n");
  166.         return 0;
  167.     }
  168.     printf("--------------------- Fichier prog ok\n");
  169. /*************************************************************/
  170.     client = setup_tcp_client(ADR_SERVER, PORT_NET, MAX_BUFFER, TX_TIMEOUT, RX_TIMEOUT);
  171.  
  172.     if( client != -1 )
  173.     {
  174.         printf("\nEnvoi de la demande du fichier prog au serveur (automatique): ");
  175.  
  176.         bzero(buffer, MAX_BUFFER);
  177.  
  178.         //scanf("prog", buffer );
  179.         buffer[0] = 'p';
  180.         buffer[1] = 'r';
  181.         buffer[2] = 'o';
  182.         buffer[3] = 'g';
  183.  
  184.         lg = strlen( buffer );  // Retourne la longueur du CONTENU, pas de la BOITE"
  185.                                 // ne fonctionne que avec de STRING !
  186.                                 // IMPOSSIBLE d'utiliser avec du BINAIRE.
  187.  
  188.         n = send(client,buffer,lg, 0);      // Transmission
  189.         if (n < 0)
  190.         {
  191.             perror("\n\nERREUR write\n\n");
  192.         }/*****************************************************************************************/
  193.         else
  194.         {
  195.             //Recoit le fichier prog a coup de 100 bytes**************************************************************************************
  196.             do
  197.             {
  198.  
  199.                 bzero(buffer_in,MAX_BUFFER);
  200.                 lg_recu = recv(client,buffer_in,MAX_BUFFER, 0); // Reception
  201.  
  202.                 if (lg_recu < 0)        //Si nb byte recu est moins de 0 donc erreur
  203.                 {//Erreur de reception
  204.                         perror("ERREUR recv");
  205.                         exit(EXIT_FAILURE);
  206.                 }
  207.                 else
  208.                 {
  209.                     buffer_in[lg_recu] = 0;                    
  210.                     compteur = 0;
  211.  
  212.                     if (lg_recu != 0)
  213.                     {  
  214.                         if(lg_recu < 100)
  215.                         {
  216.                             do
  217.                             {
  218.                                 fprintf(fichier, "%c", buffer_in[compteur]);
  219.                                 compteur++;
  220.                             } while (compteur < lg_recu-1);
  221.                         }
  222.                                                
  223.                         else
  224.                         {
  225.                             do
  226.                             {
  227.                                 fprintf(fichier, "%c", buffer_in[compteur]);
  228.                                 compteur++;
  229.                             } while (compteur < lg_recu);
  230.                         }
  231.                     }
  232.  
  233.                     snprintf(buffer_out, MAX_BUFFER, "%s", buffer_in);    //paquetTx = paquetRx;
  234.                     //lg_out = strlen(paquetTx);                      //calculer la longeur du nom de fichier
  235.                     //paq_lg = sizeof( struct sockaddr_in);
  236.                     lg_tx=send(client, buffer_out, MAX_BUFFER,0);
  237.        
  238.                     if (lg_tx < 0)  //Si la longeur paquetTx transmit est negative donc erreur
  239.                     {
  240.                         perror("ERREUR Sendto");
  241.                         exit(EXIT_FAILURE);
  242.                     }
  243.                     printf("     ->Confirm√©\n");
  244.                     nbPack_send++;
  245.  
  246.                 }
  247.             } while(lg_recu > 0);
  248.  
  249.            
  250.             //printf("\nDatagram recu: \nLongueur(%i) \nContenu -->%s<--\n\n", lg, buffer);
  251.         }
  252.         close(client);
  253.     }
  254.     fclose(fichier);
  255. }
  256.  
  257. //--------------------------------------------------------------------------------------
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top