TCPserver на Си. Проблема с передачей сообщений

Тестирую TCP-сервер, задача состоит в том что я должен принимать от клиента сообщения, сначала все данные считываются правильно, но потом в начало массива попадают странные символы, не знаю как избавиться от них. Вот функция в которой принимаю сообщения(client.client - это дескриптор сокета клиента):

int recv_data(client_info& client, FILE* file) {

    int num = 0;

    int rcv = recv(client.client, (char*)&num, 4, 0);
    if (rcv <= 0)
    {
        printf("Num of message ERROR\n");
        return -1;
    }

    printf("num = %d\n", num);
    fprintf(file, "%u.%u.%u.%u:", (client.ip >> 24) & 0xFF, (client.ip >> 16) & 0xFF, (client.ip >> 8) & 0xFF, (client.ip) & 0xFF);
    fprintf(file, "%u ", client.port);


    char dd1 = 0, mm1 = 0, dd2 = 0, mm2 = 0, hh = 0, mm = 0, ss = 0;
    unsigned short yyyy1 = 0, yyyy2 = 0;


    rcv = recv(client.client, (char*)&dd1, 1, 0);
    fprintf(file, "%d.", dd1);
    printf("%d.", dd1);


    rcv = recv(client.client, (char*)&mm1, 1, 0);
    fprintf(file, "%d.", mm1);
    printf("%d.", mm1);

    rcv = recv(client.client, (char*)&yyyy1, 2, 0);
    fprintf(file, "%d.", yyyy1);
    yyyy1 = ntohs(yyyy1);
    printf("%d ", yyyy1);


    rcv = recv(client.client, (char*)&dd2, 1, 0);
    fprintf(file, "%d.", dd2);
    printf("%d.", dd2);


    rcv = recv(client.client, (char*)&mm2, 1, 0);
    fprintf(file, "%d.", mm2);
    printf("%d.", mm2);

    rcv = recv(client.client, (char*)&yyyy2, 2, 0);
    fprintf(file, "%d.", yyyy2);
    yyyy2 = ntohs(yyyy2);
    printf("%d ", yyyy2);

    char buffer[512] = { 0 };
    rcv = recv(client.client, buffer, sizeof(buffer), 0);
    int len = strlen(buffer);
    buffer[len + 1] == '\0';
    printf("\n%s", buffer);
    fputs(buffer, file);

    if (rcv >= 0)
        send(client.client, "ok", 2, 0);

    fclose(file);

}

В buffer должен получить сообщение "msg1", а получаю перед этим еще какие-то символы, при этом tcp-клиент все отправляет правильно 100%. У меня раньше была проблема, что scanf оставляет после себя символы в потоке stdin, мб тут что-то похожее, помогите если знаете как исправить


Ответы (0 шт):