Klient nie znający adresu serwera

Odpowiedz Nowy wątek
2011-09-11 16:45
camillos
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 = ???

Pozostało 580 znaków

2011-09-11 16:54
cppppppp
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

Według mnie teraz jest nieodpowiedzialne pisanie programów pod IPv4, radzę zmienić pętlę, żeby obsługiwała IPv6. - Zjarek 2011-09-11 17:01
0xFFFFFFFF to nie jest przypadkiem -1? - krwq 2011-09-11 20:15
0xFFFFFFFF to 4294967295 - Azarien 2011-09-12 12:33
czyli się zapętli - krwq 2011-09-12 13:12

Pozostało 580 znaków

2011-09-11 17:01
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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2011-09-11 17:25
camillos
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ą?

Pozostało 580 znaków

2011-09-11 17:38
0

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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2011-09-11 18:15
Kumashiro
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.

Pozostało 580 znaków

2011-09-11 21:47
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ć.

edytowany 1x, ostatnio: smykowski, 2011-09-11 22:20

Pozostało 580 znaków

2011-09-12 08:37
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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