Не могу получить страницу html с моего HTTP-сервера, написанную на C - PullRequest
0 голосов
/ 27 мая 2020

Я не могу открыть в своем браузере страницу HTML с моего сервера, написанную на C. Код для сервера находится здесь:

#define PORT 8080

int serverSocket = 0;

//Creating a socket, AF_INET is for IPv4
if ((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
    perror("Error in socket");
    exit(EXIT_FAILURE);
}

//setting address
struct sockaddr_in address;
address.sin_family = AF_INET;
address.sin_port = htons(PORT); //htons() is for converting TCP/IP network byte order.
address.sin_addr.s_addr = INADDR_ANY;
memset(&address.sin_zero, 0, sizeof(address.sin_zero)); //IMPORTANT to clear sin_zero because of unexpected behavior!

//binding server
if (bind(serverSocket, (struct sockaddr*)&address, sizeof(address)) < 0) {
    perror("Error in bind");
    exit(EXIT_FAILURE);
}

//setting listen
if (listen(serverSocket, 10) < 0) {
    perror("Error in listen");
    exit(EXIT_FAILURE);
}

long valRead = 0;
int newSocket = 0;
int addrLen = sizeof(address);

char *send = "GET /index.html HTTP/1.1 200 OK\nContent-Type: text/html;charset=UTF-8\nContent-Length: 242\n\nindex.html";

while(1) {
    printf("Waiting for a connection.\n");
    if (newSocket = accept(serverSocket, (struct sockaddr*)&address, (socklen_t*)&addrLen) < 0) {
        perror("Error in accept");
        exit(EXIT_FAILURE);
    }
    char buffer[3000] = {0};
    valRead = read(newSocket, buffer , sizeof(buffer));
    printf("%s\n", buffer);
    write(newSocket, send, strlen(send));
    printf("Sent\n");
    if (close(newSocket) < 0) {
        perror("Error in close");
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
}
return 0;

Вывод на терминал: Server is running on my Virtual Machine.

Я также использую браузер в моей виртуальной машине. Page just isn't loading. После попытки подключения сервер все еще ожидает подключения.

В чем может быть проблема? Спасибо.

1 Ответ

1 голос
/ 27 мая 2020

Здесь вам нужны круглые скобки, потому что < имеет более высокий приоритет, чем =:

if ((newSocket = accept(serverSocket, (struct sockaddr*)&address, (socklen_t*)&addrLen)) < 0) {

Вы устанавливаете newSocket на результат сравнения, а не на дескриптор, возвращаемый accept().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...