Сервер сокетов HTTP LWIP -RTOS -tiva c

Я разрабатываю code, использующий API сокета LWIP для создания HTTP-сервера. При запуске codeа мне удается получить функцию чтения сокета только один раз, позже запрос на чтение не происходит, но при проверке в Wireshark отображается [RST,ACK] seq=1,ack =1 Win=65500 Len=0

Можно получить данные через сокет только один раз. После этого по TCP отправляется автоматическое сообщение о сбросе.

void HTTPServerTask(void *pvParameters)
{
    int sockfd, new_sock;
    struct sockaddr_in servaddr, cliaddr;
    socklen_t cliaddr_len;
    char recv_buffer[1024];

    // Create socket
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        // Handle error
        return;
    }

    // Initialize server address structure
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(HTTP_PORT);

    // Bind the socket to the specified port
    if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
    {
        // Handle error
        return;
    }

    // Start listening for incoming connections
    if (listen(sockfd, 5) < 0)
    {
        // Handle error
        return;
    }

    while (1)
    {
        // Accept a new connection
        cliaddr_len = sizeof(cliaddr);
        new_sock = accept(sockfd, (struct sockaddr *)&cliaddr, &cliaddr_len);
        if (new_sock < 0)
        {
            // Handle error
            continue;
        }

        // Receive data (this can be the HTTP request from the client)
        int len = recv(new_sock, recv_buffer, sizeof(recv_buffer), 0);
        if (len > 0)
        {
            // Process and respond
            send(new_sock, http_html, sizeof(http_html) - 1, 0);
        }

        // Close the connection
        close(new_sock);
    }

    // Close the listening socket if needed (but typically not in a loop)
    // close(sockfd);
}
Людмила
Вопрос задан13 февраля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.