gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 22:59:35 25 4
gpt4 key购买 nike

目前我正在构建一个点对点网络架构,并且正处于创建一个接收函数的阶段,该函数将接受来自网络上多个客户端的消息。本质上,当 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com