Я создаю клиентскую и серверную программу, которая обменивается данными по TCP, и у меня возникают проблемы с отправкой ACK-подтверждения с сервера обратно клиенту, когда операция прошла успешно. Мне удалось отправить структуру с различными членами от клиента на сервер, затем сервер должен ответить, отправив целое число, подтверждающее идентификатор структуры, обратно клиенту.
В server.c у меня есть эта функция:
int sendACK(int socket, int ack_int){
int com_result;
int ACK = htonl(ack_int);
printf("\n\tSending ACK with value: %i", ack_int);
com_result = send(socket, &ACK, sizeof(ACK), 0);
if (com_result == -1) {
perror("\n\t[ERROR] Send ACK");
return 0;
}
return 1;
}
Эта функция вызывается другой функцией в server.c, например:
int ACK = myStruct->ID;
sendACK(socket, ACK);
Итак, если я только что получил структуру с ID: 2, результат будет:
Отправка ACK со значением: 2
В client.c я получаю ACK следующим образом:
int ACK = 0;
data_size = sizeof(myStruct.ID);
com_result = read(client_socket, &ACK, data_size);
ACK = ntohl(ACK);
if (com_result == -1) {
perror("\n\t[ERROR] Read");
} else {
printf("\n\tRecieved %i of %i bytes", com_result, data_size);
if (ACK != myStruct.ID) {
printf("\n\t[ERROR] Invalid ACK (%i).", ACK);
}
}
Но ACK всегда принимается со значением 1, поэтому вывод от клиента:
Получено 4 из 4 байтов
ОШИБКА] Неверный ACK (1).
Почему целое число не получено со значением 2 , и как я могу это исправить?