Guest User

Untitled

a guest
Jun 19th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. /**
  2.  *  ddrFTP
  3.  *
  4.  *  Author: Jan Łukaszewicz
  5.  *      94398
  6.  */
  7.  
  8. #include <cstdio>
  9. #include <string>
  10. #include <strings.h>
  11.  
  12. #include <sys/types.h>
  13. #include <sys/socket.h>
  14. #include <netinet/in.h>
  15. #include <netdb.h>
  16.  
  17. #include <pthread.h>
  18.  
  19. #include "FtpSession.h"
  20.  
  21. using namespace std;
  22.  
  23. const int MAX_QUEUE_SIZE = 10;
  24.  
  25.  
  26. void* mainLoop(void*);
  27. void* ftpSession(void*);
  28.  
  29. int main(int argc, char *argv[])
  30. {
  31.     int *port = new int;
  32.    
  33.     if (argc >= 2 && strcmp(argv[1], "-p") == 0)
  34.     {
  35.         *port = atoi(argv[2]); 
  36.     }
  37.     else
  38.     {
  39.         *port = 8888;
  40.     }
  41.  
  42.     string welcomeMessage = "Welcome to ddrFTP\n";
  43.    
  44.    
  45.     printf("%s", welcomeMessage.c_str());
  46.     printf("I am listening on %d\n", *port);
  47.     pthread_t mainThread;
  48.     pthread_create(&mainThread, NULL, mainLoop, port);
  49.    
  50.    
  51.     char killChar;
  52.     scanf("%c", &killChar);
  53.     printf("Server terminated\n");
  54.     return 0;
  55. }
  56.  
  57. void* mainLoop(void *args)
  58. {
  59.     //struct servent *service_ptr;
  60.     struct sockaddr_in server_addr, client_addr;
  61.     int *port = (int*)args;
  62.    
  63.     int server_sck;
  64.     unsigned int addr_len;
  65.  
  66.     bzero(&server_addr, sizeof server_addr);
  67.    
  68.     server_addr.sin_addr.s_addr = INADDR_ANY;
  69.     server_addr.sin_family = AF_INET;
  70.     server_addr.sin_port = htons(*port);
  71.    
  72.     if ((server_sck = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
  73.         perror("Cannot open socket");
  74.     if (bind(server_sck,(struct sockaddr*)&server_addr, sizeof server_addr)<0)
  75.         printf("Cannot bind socket %d to service\n",server_sck);
  76.     if (listen(server_sck,  MAX_QUEUE_SIZE)<0)
  77.         perror("Cannot listen");
  78.     else
  79.     {
  80.         int *client_sck = new int;
  81.         addr_len=sizeof(struct sockaddr_in);
  82.        
  83.         while((*client_sck=accept(server_sck, (struct sockaddr*)&client_addr, &addr_len))>=0)
  84.         {
  85.             unsigned int *arg = new unsigned int;
  86.             *arg = *client_sck;
  87.            
  88.             pthread_create(new pthread_t(), NULL, ftpSession, arg);
  89.            
  90.             client_sck = new int;
  91.         }
  92.         delete client_sck;
  93.     }
  94.  
  95.     close(server_sck);
  96.     return NULL;
  97. }
  98.  
  99. void* ftpSession(void *args)
  100. {
  101.     int *sck = (int*)args;
  102.     /* to coś tam robisz */
  103.     pthread_exit(NULL);
  104.     return NULL;
  105. }
Add Comment
Please, Sign In to add comment