Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- C socket server example, handles multiple clients using threads
- Compile
- gcc server.c -lpthread -o server
- */
- #include <bits/stdc++.h>
- using namespace std;
- void parsing(char* c);
- void *connection_handler(void *);//the thread function
- void getRequest(string fileName);
- void postRequest();
- int main(int argc , char *argv[])
- {
- printf("%d\n",argc);
- if(argc < 2)
- {
- puts("no port number specified ");
- return 1;
- }
- int socket_desc , client_sock , c;
- struct sockaddr_in server , client;
- //Create socket
- socket_desc = socket(AF_INET , SOCK_STREAM , 0);
- if (socket_desc == -1)
- {
- printf("Could not create socket");
- }
- puts("Socket created");
- //Prepare the sockaddr_in structure
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = INADDR_ANY;
- server.sin_port = htons( argv[1] ); //get port number from the terminal
- //Bind
- if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
- {
- //print the error message
- perror("bind failed. Error");
- return 1;
- }
- puts("bind done");
- //Listen
- listen(socket_desc , 50); // handle 50 request
- //Accept and incoming connection
- puts("Waiting for incoming connections...");
- c = sizeof(struct sockaddr_in);
- pthread_t thread_id;
- while( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
- {
- puts("Connection accepted");
- if( pthread_create( &thread_id , NULL , connection_handler , (void*) &client_sock) < 0)
- {
- perror("could not create thread");
- return 1;
- }
- //Now join the thread , so that we dont terminate before the thread
- //pthread_join( thread_id , NULL);
- puts("Handler assigned");
- }
- if (client_sock < 0)
- {
- perror("accept failed");
- return 1;
- }
- return 0;
- }
- /*
- * This will handle connection for each client
- * */
- void *connection_handler(void *socket_desc)
- {
- //Get the socket descriptor
- int sock = *(int*)socket_desc;
- int read_size;
- char *message , client_message[2000];
- //Send some messages to the client
- message = "Greetings! I am your connection handler\n";
- write(sock , message , strlen(message));
- message = "Now type something and i shall repeat what you type \n";
- write(sock , message , strlen(message));
- //Receive a message from client
- while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 )
- {
- client_message[read_size] = '\0';//end of string marker
- parsing(client_message);
- memset(client_message, 0, 2000);//clear the message buffer
- }
- if(read_size == 0)
- {
- puts("Client disconnected");
- fflush(stdout);
- }
- else if(read_size == -1)
- {
- perror("recv failed");
- }
- return 0;
- }
- void parsing(char *c){
- istringstream iss(c);
- vector<string> tokens;
- copy(istream_iterator<string>(iss),istream_iterator<string>(),back_inserter(tokens));
- if(tokens[0]=="get"){
- getRequest(tokens[1]);
- }
- else if (tokens[0]=="post"){
- postRequest();
- }
- }
- void getRequest(string fileName){
- }
- void postRequest(){
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement