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

标签 c++ network-programming p2p winsock2 sockaddr-in

目前我正在构建一个点对点网络架构,并且正处于创建一个接收函数的阶段,该函数将接受来自网络上多个客户端的消息。本质上,当 recvfrom 函数被调用时——最近向主客户端发送消息的客户端的地址被加载到一个名为 fromAddr 的 sockaddr_in 结构中。然后,该程序被设计为遍历包含客户端类的多个实例(每个实例都包含必要的信息和功能以代表网络上的客户端)的 vector ,并找到其 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);
    }
}
}

程序编译时报如下错误:

Error 3 error C2678: binary '==' : no operator found which takes a left-hand operand of type 'IN_ADDR' (or there is no acceptable conversion)

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

if(anAddr == fraeAddress)

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

最佳答案

您可能想像这样测试 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))

关于c++ - 想评估两个 sockaddr_in 结构之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176889/

相关文章:

c++ - 如何遍历作为某个派生类的基对象

c++ - 在 NITE 和 OpenNI 上使用 makefile 编译 PointViewer

c++ - 使用boost Spirit解析带有二进制信封的文本文件

c - fopen 无法打开 Windows 主机文件

java - 在P2P架构中使用超时

当派生类是最终的时,C++ 虚函数内联?

c# - UNET 客户端无法发送服务器命令,主机可以

c++ - Linux C++ : Accessing network statistics

java - NAT背后的UDP打洞

Android 在 wifi direct 和非 wifi direct 设备之间传输数据