想评估两个 sockaddr_in 结构之间的比较

Enc*_*ter 0 c++ p2p network-programming winsock2 sockaddr-in

目前,我正在构建一个对等网络架构,并处于创建接收功能的阶段,该功能将接受来自网络上多个客户端的消息。本质上,当调用 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);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

程序编译时报如下错误:

错误 3 错误 C2678:二进制“==”:未找到采用“IN_ADDR”类型的左侧操作数的运算符(或没有可接受的转换)

可以推断,我还尝试通过简单地比较两个 sockaddr_in 结构本身来评估表达式:

if(anAddr == fraeAddress)
Run Code Online (Sandbox Code Playgroud)

报告相同的错误。问题是:如果没有创建一个带有重载运算符函数的 sockaddr_in 类来允许您评估表达式,那么实现这种比较的最简单方法是什么?

DNT*_*DNT 5

您可能想像这样测试 in_addr 的 unsigned long 成员:

if((anAddr.sin_addr.s_addr == fraeAddress.sin_addr.s_addr) && (anAddr.sin_port == fraeAddress.sin_port))
Run Code Online (Sandbox Code Playgroud)

或对于 Windows:

if((anAddr.sin_addr.S_addr == fraeAddress.sin_addr.S_addr) && (anAddr.sin_port == fraeAddress.sin_port))
Run Code Online (Sandbox Code Playgroud)