Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*****************************************************************
- --> server-uni.c
- Module d'utilisation d'un serveur connexion unique via un socket TCP sur Unix
- Stevens Gagnon
- Departement Informatique
- College Shawinigan
- ******************************************************************/
- #define MAX_BUFFER 100
- #define TX_TIMEOUT 0
- #define RX_TIMEOUT 0
- // ---- Parametres specifique au serveur
- #define ADR_LISTEN "INADDR_ANY" // "INADDR_ANY" ou "192.168.2.2"
- #define PORT_NET 32150 /* Port sur lequel le serveur attend */
- /* ------------------------------------------------------------- */
- #include "sg_tcp.h"
- //---------------------------------------------------------------- main
- int
- main()
- {
- int i;
- int serveur;
- int client;
- int compt, status, nbpaquet;
- char buffer_in[MAX_BUFFER+1];
- char buffer_out[MAX_BUFFER+1];
- int n, lg;
- buffer_in[MAX_BUFFER] = 0;
- buffer_out[MAX_BUFFER] = 0;
- FILE *U_Tx;
- U_Tx = fopen("prog", "r");
- if( U_Tx == NULL)
- {
- printf("--------------------- Probleme de fichier\n");
- return 0;
- }
- printf("\n---------------- ");
- serveur = setup_tcp_serveur(ADR_LISTEN, PORT_NET, MAX_BUFFER, TX_TIMEOUT, RX_TIMEOUT);
- if ( serveur != -1 )
- {
- client = accept_tcp_client(serveur);
- close(serveur);
- }
- if ( client != -1)
- {
- printf("\n---------------- ");
- prt_IP( client );
- printf(" ----------------\n");
- bzero(buffer_in,MAX_BUFFER);
- lg = recv(client,buffer_in,MAX_BUFFER, 0); // reception
- if (lg < 0)
- {
- perror("\n\nERREUR read\n\n");
- }
- else
- {
- //printf("\nDatagram recu: \nLongueur(%i) \n-->%s<--\n\n", lg, buffer_in);
- do
- {
- MAX_BUFFER = 100;
- bzero(buffer_out,MAX_BUFFER);
- compt = 0;
- //Remplir le paquetTx
- while ((compt < MAX_BUFFER) && (status != EOF))
- {
- status = fscanf(U_Tx, "%1c", &buffer_out[compt]);
- compt++;
- }
- //snprintf( buffer_out, MAX_BUFFER, ")%s(", buffer_in );
- lg = compt;
- //printf("-->Serveur transmet %i bytes ==>>%s<<==", lg, buffer_out);
- printf("\nPaquet transmit: \nLongueur(%i) \n\n", lg+2, buffer_out);
- n = send(client,buffer_out,strlen( buffer_out ), 0); // Transmission
- if (n < 0) perror("\n\nERREUR write\n\n");
- printf("Transmission de %i byte terminee", lg);//ou ajouter +2??
- // strlen() = Retourne la longueur du CONTENU, pas de la BOITE"
- // ne fonctionne que avec de STRING !
- // IMPOSSIBLE d'utiliser avec du BINAIRE.
- } while (status != EOF);
- //(ok) Transmet le paquet en NULL pour signifier la fin
- bzero(buffer_out,MAX_BUFFER+1); //Mettre des NULL dans tout les place de paquetTx
- lg = strlen(buffer_out); //calcule longeur de buffer_out
- //printf("\n-->Serveur transmet %i bytes ==>>%s<<== (la fin)", lg, buffer_out);
- //printf("\n ->TO: ");
- // prt_sockaddr_in(client);
- //id = socket2id(client);
- //printf(" ->socket2id = %12lX\n", id);
- n = send(client,buffer_out,strlen( buffer_out ), 0); // Transmission
- if (n < 0) perror("\n\nERREUR write\n\n");
- printf("Transmission de %i byte terminee", lg);//ou ajouter +2??
- printf("\n --> Fin prog (%i paquets envoyés)\n", nbpaquet);
- }
- close(client);
- }
- }
- /*********************************************************************************************************************************/
- /*****************************************************************
- --> client-1234.c
- Module d'utilisation d'un client via un socket TCP sur Unix
- Stevens Gagnon
- Departement Informatique
- College Shawinigan
- ******************************************************************/
- #define MAX_BUFFER 100
- #define TX_TIMEOUT 0
- #define RX_TIMEOUT 0
- // ---- Parametres specifique au serveur
- #define ADR_SERVER "amx.xoox.ca" // "amx.xoox.ca" -ou- "234.12.24.2"
- #define PORT_NET 32150 // Port sur lequel le serveur attend
- /* ------------------------------------------------------------- */
- #include "sg_tcp.h"
- //-------------------------------------------------------------------------------------- main
- int main()
- {
- char buffer[MAX_BUFFER+1];
- int client;
- int n, lg, lg_recu,lg_tx;
- /**************************************************/
- int status, compteur;
- int nbPack_send = 0;
- char buffer_out[MAX_BUFFER+1];
- char buffer_in[MAX_BUFFER+1];
- FILE *fichier;
- fichier = fopen("prog", "w");
- if( fichier == NULL)
- {
- printf("--------------------- Probleme de fichier\n");
- return 0;
- }
- printf("--------------------- Fichier prog ok\n");
- /*************************************************************/
- client = setup_tcp_client(ADR_SERVER, PORT_NET, MAX_BUFFER, TX_TIMEOUT, RX_TIMEOUT);
- if( client != -1 )
- {
- printf("\nEnvoi de la demande du fichier prog au serveur (automatique): ");
- bzero(buffer, MAX_BUFFER);
- //scanf("prog", buffer );
- buffer[0] = 'p';
- buffer[1] = 'r';
- buffer[2] = 'o';
- buffer[3] = 'g';
- lg = strlen( buffer ); // Retourne la longueur du CONTENU, pas de la BOITE"
- // ne fonctionne que avec de STRING !
- // IMPOSSIBLE d'utiliser avec du BINAIRE.
- n = send(client,buffer,lg, 0); // Transmission
- if (n < 0)
- {
- perror("\n\nERREUR write\n\n");
- }/*****************************************************************************************/
- else
- {
- //Recoit le fichier prog a coup de 100 bytes**************************************************************************************
- do
- {
- bzero(buffer_in,MAX_BUFFER);
- lg_recu = recv(client,buffer_in,MAX_BUFFER, 0); // Reception
- if (lg_recu < 0) //Si nb byte recu est moins de 0 donc erreur
- {//Erreur de reception
- perror("ERREUR recv");
- exit(EXIT_FAILURE);
- }
- else
- {
- buffer_in[lg_recu] = 0;
- compteur = 0;
- if (lg_recu != 0)
- {
- if(lg_recu < 100)
- {
- do
- {
- fprintf(fichier, "%c", buffer_in[compteur]);
- compteur++;
- } while (compteur < lg_recu-1);
- }
- else
- {
- do
- {
- fprintf(fichier, "%c", buffer_in[compteur]);
- compteur++;
- } while (compteur < lg_recu);
- }
- }
- snprintf(buffer_out, MAX_BUFFER, "%s", buffer_in); //paquetTx = paquetRx;
- //lg_out = strlen(paquetTx); //calculer la longeur du nom de fichier
- //paq_lg = sizeof( struct sockaddr_in);
- lg_tx=send(client, buffer_out, MAX_BUFFER,0);
- if (lg_tx < 0) //Si la longeur paquetTx transmit est negative donc erreur
- {
- perror("ERREUR Sendto");
- exit(EXIT_FAILURE);
- }
- printf(" ->Confirmé\n");
- nbPack_send++;
- }
- } while(lg_recu > 0);
- //printf("\nDatagram recu: \nLongueur(%i) \nContenu -->%s<--\n\n", lg, buffer);
- }
- close(client);
- }
- fclose(fichier);
- }
- //--------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement