1

現在、私はピア ツー ピア ネットワーク アーキテクチャを構築している最中であり、ネットワーク上の複数のクライアントからのメッセージを受け入れる受信機能を作成する段階にあります。基本的に、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 クラスを作成する以外に、この比較を実装する最も簡単な方法は何でしょうか?

4

2 に答える 2

6

次のように in_addr の unsigned long メンバーをテストすることができます:

if((anAddr.sin_addr.s_addr == fraeAddress.sin_addr.s_addr) && (anAddr.sin_port == fraeAddress.sin_port))

または Windows の場合:

if((anAddr.sin_addr.S_addr == fraeAddress.sin_addr.S_addr) && (anAddr.sin_port == fraeAddress.sin_port))
于 2015-03-20T23:18:38.497 に答える