Klient nie znający adresu serwera

0

Witam. Potrzebuje pomocy, piszę prosty program typu klient - serwer. Jednak nie bardzo wiem jak mam ustawić klienta żeby wysłał pakiet na każdy adres IP, ponieważ założenie jest takie że znam tylko port na którym pracuje serwer, IP jest w kliencie nieznane. Jakieś rady?
Prawdopodobnie muszę w jakiś specjalny sposób ustawić
saddr.sin_addr = ???

0

jak nie znasz adresu serwera, to jak chcesz wysyłać cokolwiek?

chcesz wysyłać na każdy możliwy adres ip? proszę bardzo:

for(int i=0; i<0xFFFFFFFF; ++i)
{
    sin_addr = i;
}

powodzenia :D

0

@camillos nie żartuj sobie... zainteresuj się czymś takim jak komunikacja multicastowa ;)
Działa to tak ze serwer moze "zarejestrować się" że chce dostawać wszystkie multicasty wysyłane na adres X (z klasy multicastowej) i wtedy klienci mogą spokojnie na ten adres wysyłać nie wiedząc jaki adres ma serwer.

0

Uruchamiam pogram i on w sieci odnajduje i łączy sie ze swoimi kopiami na innych komputerach przy użyciu UDP. Nie zrobię tego inaczej niż komunikacją multicastową?

0

Bez szans. Co więcej, skąd pomysł ze te komputery w ogóle maja publiczne IP? Multicast jest tutaj idealną opcją.

0

UWAGA! Pakiety multicastowe nie przechodzą przez większość ruterów! To jest rozwiązanie dla zamkniętych sieci (LAN, WAN, MAN).
Jeśli serwer może być na dowolnej maszynie w sieci lokalnej, to stosuje się różne mechanizmy:

  1. Aktualizacja DNS - serwer ma znaną nazwę i rejestruje się do systemu, który odpowiednio aktualizuje rekord w lokalnym serwerze DNS. Klienta łączą się po nazwie. Ten mechanizm wykorzystują np. niektóre usługi Microsoft, czy dynDNS.
  2. Rozgłaszanie pytania - klienta wysyłają broadcast z pytaniem o serwer. Jeśli jest on obecny w sieci, odpowiada na nie i na tej podstawie klient określa adres IP serwera. Mechanizm stosowany jest np. w Microsoft Networking.
  3. Pośrednik sieciowy - w sieci znajduje się jedna maszyna, która pośredniczy w wymianie danych między klientami i serwerem. Obie strony podłączają się do pośrednika, który ma stały i znany adres.
  4. Rozgłaszanie multicast - mniej więcej to samo co broadcast, tyle że używane są pakiety multicastowe zamiast unicastowych. Mechanizm stosowany np. w DNS-SD.

Znajdowanie serwera poprzez rozgłaszanie oraz aktualizację DNS wymaga wprowadzenia dodatkowych zabezpieczeń, gdyż w bardzo prosty sposób można się podszyć pod serwer. W tym pierwszym sposobie wystarczy odpowiedzieć szybciej niż właściwy serwer (wcześniej dodatkowo go [D]DoSując jeśli konieczne), w tym drugim - zarejestrować się jako serwer. Rozgłaszanie broadcast i multicast jest odpowiednie jedynie w przypadku, gdy w danej sieci może się znajdować kilka maszyn serwujących takie same, lub podobne zasoby (np. drukarki, strumienie audio/wideo itp), które nie są krytyczne dla bezpieczeństwa. Jeśli w sieci jest tylko jeden serwer, powinien mieć on stały i znany adres IP lub nazwę, której nie można zaktualizować automatycznie w DNSie (nawet przez DHCP).

Pytania takie jak powyżej najczęściej dotyczą maszyn podpiętych do jakiejś Neostrady, ze zmiennym IP. W takich przypadkach najlepiej jest skorzystać z usługi typu dynDNS.

0

Ja się na tym za bardzo nie znam ale w swojej grze robie tak że na serwerze www mam aplikacje php. Serwer gry na zmienym ip , przy uruchomieniu wysyła do aplikacji php info o swoim ip i nazwie, tam skrypt zapisuje to w pamięci. Serwer www ma stały ip. Gra przy starcie wchodzi na serwer www i sprawdza na jakim ip jest jaki serwer i po wyborze serwera uruchamia połonczenie z serwerem. Aplikacje php napisał mi kolega więc się nie pytaj co i jak bo niewięm jak to napisać.

0

Pytanie uściślające do autora tego wątku: czy to ma być w sieci lokalnej czy w caaaałym internecie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1