[C++] Winsock - jak znaleźć wszystkie urządzenia w sieci LAN, na których uruchomiony jest program


(Kamkaz) #1

Jak w temacie. Borykam się z napisaniem komunikatora pod WINSOCKiem, chciałbym w jakiś sposób zdobyć listę ip wszystkich innych komputerów w sieci lokalnej, na których obecnie jest uruchomiony dany program. Nie wiem, jak się do tego zabrać - jedynym pomysłem, który jest wg mnie zdecydowanie za wolny, jest odpalenie funkcji connect() dla wszystkich ip należących do sieci. Jednak czas, po jakim connect() orientuje się, że coś jest nie tak, w moich próbach wahał się między 5-10 s (Nie wiem, czy to normalne jego zachowanie, czy też robię coś nie tak). Dla maski podsieci 255.255.255.0 to 20 minut szukania :slight_smile: Proszę o jakąś podpowiedź, narzędzie lub ideę, jak by to miało wyglądać.

 

@edit -> kodzę pod Windowsem, kompiluję MINGW, ten projekt konstruuję pod QT.

 

Z góry dziękuję za odpowiedź


(Rolek0) #2

Ja bym użył UDP i zapytanie słałbym na broadcast.


(Kamkaz) #3

Jak w tym przypadku odbierać taką informację? Jeśli dobrze pamiętam, recvfrom() wymaga posiadania adresu ip, od którego się odbiera dane (jeśli nie, wyprowadźcie mnie z błędu). Gdyby dało się odbierać taką informację bez posiadania wcześniej ip nadawcy, to mój problem jest rozwiązany. Uruchamianie słuchania rozgłoszeń od 250 adresów mi się nie uśmiecha :confused:

 

@edit dogrzebałem się dostrony Microsoftu opisującej tę funkcję, sockaddr jest tylko opcjonalny, i nie ma w nim adresu źródłowego, ale jest on w niej umieszczany w wyniku wywołania tej funkcji.

W związku z tym mój problem jest rozwiązany :slight_smile: Dziękuję za pomoc