C++ Server v.need help with sending file

Discussion in 'OT Technology' started by Pudge, Dec 5, 2009.

  1. Pudge

    Pudge New Member

    Joined:
    Nov 24, 2008
    Messages:
    2,572
    Likes Received:
    0
    Location:
    Athens, GA
    For my project I am supposed to create a simple server that returns a specified file. Ex: http://college.cs.edu/6789/fileName (with 6789 being a specified port in the command line). I have created a server and I can get it to send a simple message, but I it needs to "read the content out from the file (if it exist) and send the content back to the browser through socket. The reply needs to come with a HTTP header". Help will be VERY appreciated :bowdown:.



    code:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <arpa/inet.h>
    #include <sys/wait.h>
    #include <signal.h>
    void error(char *msg)
    {
        perror(msg);
        exit(1);
    }
    
    int main(int argc, char *argv[])
    {
         int sockfd, newsockfd, portNum, clilen;
         char buffer[256];
         struct sockaddr_in serv_addr, cli_addr;
         int n;
         if (argc < 2) {
             fprintf(stderr,"ERROR, no port provided\n");
             exit(1);
         }
         sockfd = socket(AF_INET, SOCK_STREAM, 0);
         if (sockfd < 0) 
            error("ERROR opening socket");
         portNum = atoi(argv[1]);
         serv_addr.sin_family = AF_INET;
         serv_addr.sin_addr.s_addr = INADDR_ANY;
         serv_addr.sin_port = htons(portNum);
         if (bind(sockfd, (struct sockaddr *) &serv_addr,
                  sizeof(serv_addr)) < 0) 
                  error("ERROR on binding");
         listen(sockfd,5);
         clilen = sizeof(cli_addr);
         newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t*)&clilen);
         if (newsockfd < 0) 
              error("ERROR on accept");
         n = read(newsockfd,buffer,255);
         if (n < 0) error("ERROR reading from socket");
         printf("Here is the message: %s\n",buffer);
         n = write(newsockfd,"I got the message",18);
         if (n < 0) error("ERROR writing to socket");
         return 0; 
    }
    
    
     
    Last edited: Dec 5, 2009

Share This Page