проблема с отображением страницы по умолчанию на веб-сервере - PullRequest
0 голосов
/ 13 октября 2018

У меня есть простой веб-сервер, и когда я запускаю свой веб-сервер и пытаюсь получить к нему доступ через Firefox, он дает мне файл bin для загрузки вместо отображения страницы по умолчанию index.html Если я напишу ее как localhost: 8001 / index.html работает нормально и показывает содержимое файла index.html. Как я могу это исправить, чтобы при вводе как localhost: 8001 он просто открывал файл index.html и показывал его содержимое?

Основная функция моего кода:

#define PORT 8001

int main()
{
        int server_socket, new_socket;
        long value;
        struct sockaddr_in address;
        int addrlen = sizeof(address);
  char response_data[1024];


        //open a file to serve
  FILE *html_data = fopen("/home/seclab/www/index.html","r");

        fgets(response_data, 1024, html_data);

        char http_header[2048] = "HTTP/1.0 200 OK\r\n\n";
        strcat(http_header, response_data);

        //create a socket
        if((server_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        {
                    perror("can not create socket");
                    return 0;
        }

        //define the address
        //memset(address.sin_zero, '\0' , sizeof address.sin_zero );
        address.sin_family = AF_INET;
      address.sin_port = htons(PORT);
      address.sin_addr.s_addr = INADDR_ANY;

        if(bind(server_socket, (struct sockaddr *) &address, sizeof(address)) < 0 )
        {
                    perror("can't bind the address to the socket");
                    return 0;
        }

        if(listen(server_socket, 8) < 0)
        {
                    perror("In listen");
                    exit(EXIT_FAILURE);
        }

        while(1)
        {
                    //printf("\nwaiting for a connection\n\n");
                     if((new_socket = accept(server_socket,NULL , NULL)) < 0)
                     {
                                perror("In accept");
                                exit(EXIT_FAILURE);
                     }

                    send(new_socket, http_header, sizeof(http_header), 0);
                    printf("%s",http_header);
                    //char buffer[30000] = {0};
                    //value=read(new_socket, buffer , 30000);
                    //printf("%s\n",buffer);
                  //write(new_socket, response_data , strlen(response_data));
                    //printf("Greeting message sent\n");    
                    close(new_socket);
        }
        return 0;
}

Снимок экрана:

enter image description here

1 Ответ

0 голосов
/ 13 октября 2018

Вы send ответ, который sizeof(http_header), но это должен быть фактический размер ответа, то есть заголовок + прочитанные данные:

send(new_socket, http_header, strlen(http_header), 0);
...