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 で受信されるため、クライアントからの出力は次のようになります
。
整数が2の値で受信されないのはなぜですか?どうすればこれを修正できますか?