我正在构建一个客户端和一个通过 TCP 交换数据的服务器程序,当操作成功时,我无法将 ACK 确认从服务器发送回客户端。我已经设法从客户端向服务器发送了一个包含各种成员的结构,然后服务器应该通过向客户端发送一个确认结构 ID 的整数来响应。
在 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 的结构体,输出将是:
Sending ACK with value: 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,所以客户端的输出是:
Recieved 4 of 4 bytes
ERROR] Invalid ACK (1)。
为什么没有收到值为2的整数,我该如何解决这个问题?