Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.07 KB | None | 0 0
  1. #include <arpa/inet.h>
  2. #include <netdb.h>
  3. #include <netinet/in.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6. #include <pthread.h>
  7.  
  8. #define PORT 31338
  9.  
  10. int parseARGS(char **args, char *line){
  11.     int tmp=0;
  12.     args[tmp] = strtok( line, ":" );
  13.     while ( (args[++tmp] = strtok(NULL, ":" ) ) != NULL );
  14.     return tmp - 1;
  15. }
  16.  
  17. int client(void *ptr){
  18.     int  connectSOCKET;
  19.     connectSOCKET = (int ) ptr;
  20.     char recvBUFF[4096];
  21.     char *filename, *filesize;
  22.     FILE * recvFILE;
  23.     int received = 0;
  24.     char tempstr[4096];
  25.     char *header[4096];
  26.  
  27.     /*int i=0;
  28.     while(i<993199) {
  29.     i++;*/
  30.     while(1){
  31.         if( recv(connectSOCKET, recvBUFF, sizeof(recvBUFF), 0) ){
  32.             if(!strncmp(recvBUFF,"FBEGIN",6)) {
  33.                 recvBUFF[strlen(recvBUFF) - 2] = 0;
  34.                 parseARGS(header, recvBUFF);
  35.                 filename = header[1];
  36.                 filesize = header[2];
  37.                 printf("Fichier: %s\n", filename);
  38.                 printf("Taille: %d Kb\n", atoi(filesize) / 1024);
  39.         }
  40.         recvBUFF[0] = 0;
  41.         recvFILE = fopen ( filename,"w" );
  42.         while(1){
  43.             if( recv(connectSOCKET, recvBUFF, 1, 0) != 0 ) {
  44.                 fwrite (recvBUFF , sizeof(recvBUFF[0]) , 1 , recvFILE );
  45.                 received++;
  46.                 recvBUFF[0] = 0;
  47.                 } else {
  48.                 printf("Progression: %s [ %d of %s bytes]\n", filename, received , filesize);
  49.                 return 0;
  50.                 }
  51.             }
  52.             return 0;
  53.         } else {
  54.         printf("Client déconnecté\n");
  55.         }
  56.     return 0;
  57.     }
  58. }
  59.  
  60.  
  61. int main()
  62. {
  63.     int socketINDEX = 0;
  64.     int listenSOCKET, connectSOCKET[4096];
  65.     socklen_t clientADDRESSLENGTH[4096];
  66.     struct sockaddr_in clientADDRESS[4096], serverADDRESS;
  67.     pthread_t threads[4096];
  68.  
  69.     listenSOCKET = socket(AF_INET, SOCK_STREAM, 0);
  70.     if (listenSOCKET < 0) {
  71.         printf("Peut pas crée socket\n");
  72.         close(listenSOCKET);
  73.         return 1;
  74.     }
  75.  
  76.     serverADDRESS.sin_family = AF_INET;
  77.     serverADDRESS.sin_addr.s_addr = htonl(INADDR_ANY);
  78.     serverADDRESS.sin_port = htons(PORT);
  79.  
  80.     if (bind(listenSOCKET, (struct sockaddr *) &serverADDRESS, sizeof(serverADDRESS)) < 0) {
  81.         printf("Peut pas trouver la socket\n");
  82.         close(listenSOCKET);
  83.         return 1;
  84.     }
  85.  
  86.     listen(listenSOCKET, 5);
  87.     clientADDRESSLENGTH[socketINDEX] = sizeof(clientADDRESS[socketINDEX]);
  88.     int i=0;
  89.     /*while(i<993199) {
  90.     i++;*/
  91.     while(1){
  92.         connectSOCKET[socketINDEX] = accept(listenSOCKET, (struct sockaddr *) &clientADDRESS[socketINDEX], &clientADDRESSLENGTH[socketINDEX]);
  93.         if (connectSOCKET[socketINDEX] < 0) {
  94.             printf("Connection refusé\n");
  95.             close(listenSOCKET);
  96.             return 1;
  97.         }
  98.  
  99.         pthread_create( &threads[socketINDEX], NULL, client, connectSOCKET[socketINDEX]);
  100.         if(socketINDEX=4096) {
  101.             socketINDEX = 0;
  102.         } else {
  103.         socketINDEX++;
  104.         }
  105.     }
  106.     close(listenSOCKET);
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement