@andrkkk

Как получить ip-адреса всех запущенных серверов по UDP?

Разбираюсь с winsock и UDP. Пишу на одном пк, локальной сети нет. На клиенте посылаю широковещательный запрос:

sockaddr_in broadcast;
// разрешение на широковещательный запрос
int enableBroadcast = 1;
setsockopt(ClientSocket, SOL_SOCKET, SO_BROADCAST, (char*)&enableBroadcast, sizeof(enableBroadcast));
    
broadcast.sin_family = AF_INET;
broadcast.sin_port = htons(Port);
broadcast.sin_addr.s_addr = INADDR_BROADCAST;
// определенное сообщение,на которое сервер ответит информацией о себе
char testmessage[] = "test\n";
sendto(ClientSocket, testmessage,sizeof(testmessage), 0, (sockaddr*)&broadcast, sizeof(broadcast));

// принимаю информацию о сервере 
char infoAboutServer[1024]; 
ZeroMemory(infoAboutServer, 1024);
recvfrom(ClientSocket, infoAboutServer, 1024, 0, (SOCKADDR*)&server, &sizeOfserver);

Сервер:
char RecvBuf[1024];
while(1){
ZeroMemory(RecvBuf, BufLen);
// принимаем сообщения
recvfrom(sListen, RecvBuf, 1024, 0, (SOCKADDR*)&SenderAddr, &SenderAddrSize);
// если это сообщение-запрос информации то отправляем в ответ информацию
 if (RecvBuf == "test") {
             SenderAddr.sin_addr.s_addr = inet_addr(inet_ntoa(SenderAddr.sin_addr));
             sendto(sListen, infoMessage.c_str(), infoMessage.size(), 0, (SOCKADDR*)&SenderAddr, SenderAddrSize);           
        }        
}

Я так думаю, что если в сети будет запущено несколько серверов, то клиенту на recvfrom придет только один первый ответ от одного из серверов?Если да, то как получить ответы от всех серверов?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Вы получите ответ от всех серверов, получивших широковещательный запрос.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы