現在、私はピア ツー ピア ネットワーク アーキテクチャを構築している最中であり、ネットワーク上の複数のクライアントからのメッセージを受け入れる受信機能を作成する段階にあります。基本的に、recvfrom 関数が呼び出されると、メイン クライアントにメッセージを送信した最新のクライアントのアドレスが、fromAddr と呼ばれる sockaddr_in 構造体にロードされます。次にプログラムは、クライアント クラスの複数のインスタンス (それぞれがネットワーク上のクライアントを表すために必要な情報と機能を保持する) を含むベクトルをループ処理し、sockaddr_in 構造体が受信したばかりのものと一致するクライアント インスタンスを見つけるように設計されています。メッセージ。プログラムでは、評価は現在次のようになっています。
void UDPClass::checkID(Message* mess, sockaddr_in fraeAddress)
{
sockaddr_in anAddr;
//Iterate through the vector of clients and find the one who sent the message
for(int i = 0; i < theClients.size(); i++)
{
anAddr = theClients[i].getAddress();
//if the address of the recieved message matches the address of the current client
if((anAddr.sin_addr == fraeAddress.sin_addr) && (anAddr.sin_port == fraeAddress.sin_port))
{
//Update local instance of the client so that its location data matches that of the recieved message
theClients[i].setX(mess->x);
theClients[i].setY(mess->y);
}
}
}
プログラムをコンパイルすると、次のエラーが報告されます。
エラー 3 エラー C2678: バイナリ '==' : 型 'IN_ADDR' の左側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)
推測されるかもしれませんが、2 つの sockaddr_in 構造体自体を単純に比較して式を評価しようとしました。
if(anAddr == fraeAddress)
同じエラーが報告されます。問題は、式を評価できるオーバーロードされた演算子関数を持つ sockaddr_in クラスを作成する以外に、この比較を実装する最も簡単な方法は何でしょうか?