В настоящее время я занимаюсь разработкой одноранговой сетевой архитектуры и нахожусь на стадии создания функции приема, которая будет принимать сообщения от нескольких клиентов в сети. По сути, когда вызывается функция recvfrom - адрес последнего клиента, отправившего сообщение основному клиенту, загружается в структуру sockaddr_in, называемую fromAddr. Затем программа предназначена для прокрутки вектора, содержащего несколько экземпляров класса клиента (каждый из которых содержит необходимую информацию и функциональные возможности для представления клиента в сети) и найти экземпляр клиента, структура sockaddr_in которого соответствует только что полученному сообщение. В программе evaulation в данный момент выглядит так:Хотел бы оценить сравнение двух sockaddr_in structs
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 C2678 3 ошибки: двоичный «==»: ни один оператор не найден, который принимает левого -hand операнда типа «in_addr» (или нет приемлемого преобразования)
Как можно было сделать вывод, я также попытался оценить выражение, просто сравнивая два sockaddr_in структур себя:
if(anAddr == fraeAddress)
Который сообщает ту же ошибку. Возникает вопрос: не удалось ли создать класс sockaddr_in с перегруженными функциями оператора, которые позволили бы вам оценить выражение, каким будет самый простой способ реализации этого сравнения?
Похоже, что ['memcmp()'] (http://en.cppreference.com/w/c/string/byte/memcmp) поможет вам. Просто сравнение указателей типа 'if (anAddr == fraeAddress)' не очень помогает. –
Перегрузка оператора – arynaq