Не получаются данные, ошибка 10054 (WSAECONNRESET) из recv () в C - PullRequest
0 голосов
/ 23 февраля 2020

Итак, у меня есть базовые c знания в C, и я пытаюсь создать базовые c клиентские и серверные сокеты и получить сообщение от сервера к клиенту, но эта ошибка возникает, и я не уверен, почему.

Кроме того, мой компилятор выдает предупреждение о том, что 2-й аргумент recev, в данном случае, сообщение (addressOf), является несовместимым типом указателя, который, как я думал, был проблемой, но я не уверен, и нет Не знаю, как исправить.

Код сервера:

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

int main()
{
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,2), &wsa);

    //criando o socket
    SOCKET server = socket(AF_INET, SOCK_STREAM, 0);

    //endereçando o socket
    struct sockaddr_in serveraddr;

    serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(80);

    //fazendo a ligação do endereço ao socket
    bind(server, (SOCKADDR *) &serveraddr, sizeof(serveraddr));

    //ouvindo conexões
    int resposta = SOCKET_ERROR;

    while (resposta == SOCKET_ERROR)
    {
    resposta = listen(server, 5);
    }

    //aceitando conexões
    accept(server, NULL, NULL);

    //mandando dados
    char mensagem[256] = "Ola vc ai.";

    send(server, mensagem, sizeof(mensagem), 0);

    closesocket(server);

    return 0;
}

Код клиента:

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

int main()
{
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,2), &wsa);

    //criando o socket
    SOCKET client = socket(AF_INET, SOCK_STREAM, 0);

    //endereçando o socket
    struct sockaddr_in clientaddr;

    clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    clientaddr.sin_family = AF_INET;
    clientaddr.sin_port = htons(80);

    //conectando o socket
    connect(client, (SOCKADDR *) &clientaddr, sizeof(clientaddr));

    //recebendo dados
    char mensagem[256] = {0};

    int result = recv(client, &mensagem, sizeof(mensagem), 0);

    if (result == SOCKET_ERROR)
    {

        printf("Erro em receber a mensagem. %d", WSAGetLastError());
        return 0;

    }

    printf("%s", mensagem);

    closesocket(client);

    return 0;
}
...