Advertisement
Guest User

Untitled

a guest
Nov 17th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. /*
  2.     C socket server example, handles multiple clients using threads
  3.     Compile
  4.     gcc server.c -lpthread -o server
  5. */
  6.  
  7.  
  8. #include <bits/stdc++.h>
  9.  
  10.  
  11. using namespace std;
  12. void parsing(char* c);
  13.  
  14. void *connection_handler(void *);//the thread function
  15. void getRequest(string fileName);
  16. void postRequest();
  17. int main(int argc , char *argv[])
  18. {
  19.     printf("%d\n",argc);
  20.     if(argc < 2)
  21.     {
  22.      puts("no port number specified ");
  23.      return 1;
  24.     }
  25.     int socket_desc , client_sock , c;
  26.     struct sockaddr_in server , client;
  27.      
  28.     //Create socket
  29.     socket_desc = socket(AF_INET , SOCK_STREAM , 0);
  30.     if (socket_desc == -1)
  31.     {
  32.         printf("Could not create socket");
  33.     }
  34.     puts("Socket created");
  35.      
  36.     //Prepare the sockaddr_in structure
  37.     server.sin_family = AF_INET;
  38.     server.sin_addr.s_addr = INADDR_ANY;
  39.     server.sin_port = htons( argv[1] ); //get port number from the terminal
  40.      
  41.     //Bind
  42.     if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
  43.     {
  44.         //print the error message
  45.         perror("bind failed. Error");
  46.         return 1;
  47.     }
  48.     puts("bind done");
  49.      
  50.     //Listen
  51.     listen(socket_desc , 50); // handle 50 request
  52.      
  53.      
  54.     //Accept and incoming connection
  55.     puts("Waiting for incoming connections...");
  56.     c = sizeof(struct sockaddr_in);
  57.     pthread_t thread_id;
  58.    
  59.     while( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
  60.     {
  61.         puts("Connection accepted");
  62.          
  63.         if( pthread_create( &thread_id , NULL ,  connection_handler , (void*) &client_sock) < 0)
  64.         {
  65.             perror("could not create thread");
  66.             return 1;
  67.         }
  68.          
  69.         //Now join the thread , so that we dont terminate before the thread
  70.         //pthread_join( thread_id , NULL);
  71.         puts("Handler assigned");
  72.     }
  73.      
  74.     if (client_sock < 0)
  75.     {
  76.         perror("accept failed");
  77.         return 1;
  78.     }
  79.      
  80.     return 0;
  81. }
  82.  
  83. /*
  84.  * This will handle connection for each client
  85.  * */
  86. void *connection_handler(void *socket_desc)
  87. {
  88.     //Get the socket descriptor
  89.     int sock = *(int*)socket_desc;
  90.     int read_size;
  91.     char *message , client_message[2000];
  92.      
  93.     //Send some messages to the client
  94.     message = "Greetings! I am your connection handler\n";
  95.     write(sock , message , strlen(message));
  96.      
  97.     message = "Now type something and i shall repeat what you type \n";
  98.     write(sock , message , strlen(message));
  99.      
  100.     //Receive a message from client
  101.     while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 )
  102.     {
  103.         client_message[read_size] = '\0';//end of string marker
  104.         parsing(client_message);
  105.         memset(client_message, 0, 2000);//clear the message buffer
  106.     }
  107.      
  108.     if(read_size == 0)
  109.     {
  110.         puts("Client disconnected");
  111.         fflush(stdout);
  112.     }
  113.     else if(read_size == -1)
  114.     {
  115.         perror("recv failed");
  116.     }
  117.          
  118.     return 0;
  119. }
  120. void parsing(char *c){
  121.     istringstream iss(c);
  122.     vector<string> tokens;
  123.     copy(istream_iterator<string>(iss),istream_iterator<string>(),back_inserter(tokens));
  124.     if(tokens[0]=="get"){
  125.     getRequest(tokens[1]);
  126.     }
  127.     else if (tokens[0]=="post"){
  128.     postRequest();
  129.     }
  130.  
  131.  
  132. }
  133. void getRequest(string fileName){
  134.  
  135. }
  136. void postRequest(){
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement