TCP を使用してサーバー プログラムを作成しており、受信したばかりのメッセージの送信者の IP アドレスを取得したいと考えています。これが私のコードです:
case FD_READ:
{ //Incoming data; get ready to receive
char buffer[DEFAULT_BUFLEN];
int bytes_received;
memset(buffer, '\0', sizeof(buffer));
struct sockaddr_in recvIn;
int recv_length = sizeof(struct sockaddr);
memset((void *)&recvIn, '\0', recv_length);
bytes_received = recvfrom(wParam, buffer, DEFAULT_BUFLEN, 0, (struct sockaddr *)&recvIn, &recv_length);
cout << inet_ntoa(recvIn.sin_addr) << "\n";
break;
}
そのため、Windows メッセージを使用して、パケットをチェックする必要があるかどうかを確認しています。データの受信は機能し、それとすべてを読み取ることができます。しかし、recvIn 変数は recvfrom によって変更されません。したがって、cout << inet_ntoa(recvIn.sin_addr) << "\n" を実行すると、"0.0.0.0" と書き込まれます。私はこの問題をグーグルで検索しましたが、この問題を抱えていた他のほとんどの人は recv_length を初期化するのを忘れていました。しかし、私はここでそれを正しく行ったと確信しています。誰かが私が間違っていることを見ることができますか? または、送信されているデータで何かを変更する必要がありますか? 着信データに IP アドレスがない可能性があります。私はTCPを使用しているため、これは非常に疑わしいものです。
お時間をいただきありがとうございます。これを解決できることを願っています。