Autor Wątek: Komunikator P2P - Problem  (Przeczytany 1408 razy)

Offline ASTROMAG

  • Użytkownik

# Grudzień 13, 2007, 21:12:46
Witam,

Zamierzam napisać komunikator działający na zasadzie P2P (klient wysyła żądanie nawiązania połączenia z inną osobą do serwera a serwer odsyła klientowi numer IP tej osoby). Ale nie wiem co zrobić jeśli jeden z klientów będzie członkiem jakiejś sieci lokalnej w której ma przypisany adres IP(np.: 12.12.12.14)(adres wewnętrzny) a poza siecią lokalną będzie widoczny tak jak inni jej użytkownicy jako jeden i ten sam adres IP(np.: 124.111,111, 12)(adres zewnętrzny). Co muszę zrobić, jakie dodatkowe informację (poza adresem IP) muszę wysłać do klienta żeby ten mógł połączyć się z taką osobą??.

// EDIT:
Co zrobić jeśli żadna z 2 osób nie ma zewnętrznego IP.
« Ostatnia zmiana: Grudzień 13, 2007, 23:10:38 wysłana przez ASTROMAG »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Goliatus

  • Użytkownik
    • Warsztat - tworzenie gier

# Grudzień 14, 2007, 02:26:55
Kompletny scenariusz powinien wyglądać tak:

1) jeden z klientów akceptuje przychodzące połączenia:
- ma zewnętrzne IP i otwarty port
- jest w sieci lokalnej, ale administrator przekierował na jego komputer specjalny port (=> musisz zrobić opcję konfiguracji tego portu, oraz przekazywanie tej informacji poprzez srwer)
2) żaden z klientów nie akceptuje przychodących połączeń
- przesyłanie wiadomości poprzez serwer, innej opcji nie ma

Pamiętaj, że nawet posiadanie zewnętrznego IP nie gwarantuje, że ktoś będzie mógł akceptować połączenia przychodzące(czyli być hostem). Ktoś może nie wiedzieć jak skonfigurować system, aby to było możliwe.

Offline Moriturius

  • Użytkownik

# Grudzień 14, 2007, 10:30:00
- przesyłanie wiadomości poprzez serwer, innej opcji nie ma

Myślę, że powinno się dać to zrobić, z tym, że trzeba by było zejść na "niższy" poziom adresowania.
W takim wypadku zadaniem serwera było by ustalenie jakiejś trasy dla pakietów od jednego do drugiego.
Aktualnie nie mam pomysłu jak to zrobić, ale w chwili wolnej pomyśle nad tym ^^

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Grudzień 14, 2007, 11:32:41
Ja bym to zrobił tak:

Sewer zna adresy IP obydwu klientów zewnętrzne i nimi się posługuje przysyłając je innym klientom, więc adresy wewnętrzne nie są do niczego potrzebne ani używne. (Chyba, że chciałbyś s sposób szczególny obsłużyć przypadek, kiedy chce się skomunikować dwóch klientów we wspólnej sieci lokalnej.)

Serwer przez połączenie nawiązane do niego od każdego z klientów przesyła im adresy IP zewnętrzne drugiego klienta. Następnie każdy z klientów próbuje połączyć się z drugim pod jego adres (albo jednocześnie, albo raz jeden a raz drugi na polecenie serwera). Jeśli któryś z klientów ma zewętrzny IP lub przeforwardowany odpowiedni port i nie jest za jakimś wrednym firewallem, to drugiemu uda się do niego połączyć i sprawa jest załatwiona. Wtedy połączenie w drugą stronę można sobie podarować, można poinformować serwer że się udało i dalej komunikować się już P2P.

Jeśli ani jedno z tych dwóch połączeń się nie uda, pozostaje poinformować serwer o niepowodzeniu i komunikować się z pośrednictwem serwera. Ewentualnie zastosować sztuczkę oszukującą NAT-y za pomocą UDP, o której nieraz pisał tutaj Krzysiek K.