Komunikacja peer-to-peer

0

Witam

Potrzebuję kilku odpowiedzi. Szukałem już na ten temat w necie i przeglądałem dokumentację, więc nie bijcie.

Mamy w javie gniazdka oraz obiekt InetAddress, co teoretycznie pozwala na komunikację sieciową.

Jednak, chcę uzyskać swój zewnętrzny adres IP, bo jak inaczej to miałoby działać? Metoda getLocalHost() zwraca obiekt z wewnętrznym adresem, więc wg mnie to nie daje informacji. Ten zewnętrzny adres jest potrzebny do uzyskania, aby później w DHT go udostępnić innym userom. Jak można w takim razie połączyć się z innym komputerem?

Drugie pytanie brzmi: jak to w ogóle chce zadziałać, skoro do lokalizacji komputera w sieci (ze względu na wewnętrzne sieci lokalne) potrzebny jest: IP,port,MAC. Gdzie MAC w InetAddress??

0

Heh, to mi wiele nie pomaga, najbardziej chciałbym się dowiedzieć jak zaimplementować komunikację między dwoma komputerami...
Po prostu wydaje mi się, że powinien wystarczyć adres zewnętrzny routera (później niech się router martwi, ehternet rozsiewa pakiety do wszystkich, więc powinno dochodzić), tyle że drugi klient powinien mieć możliwość odczytania swojego IP zewnętrznego, żeby zapisać go do bazy danych DHT, z której inni będą mogli to odczytać i połączyć się z tym userem. Proszę o pomoc w tej sprawie.

OK, sorry że post pod postem. Przesiedziałem już nad tym trochę czasu i uruchomiłem komunikację na localhoście oraz na LANie. Problem powstaje, gdy chcę komunikować się już całkowicie przez internet - problemem jest NAT. Olewam w tym momencie inne problemy, które poprzednio miałem, wpisuję IP zewnętrzne na sztywno ale i tak nie działa...

0

Bo w sieci p2p zazwyczaj jest jakiś punkt zbiorczy w którym rejestrowany jest twój klient, a następnie połączenie do niego przekazywane innym zainteresowanym.

0

Tak, tylko w tym projekcie jest założenie całkowitej rozproszoności. Nie mogę postawić serwera...

0

Z tego, co mi wiadomo, to tego nie da się tak prosto zrobić.

Jeżeli masz dwóch klientów, obaj mają wewnętrzne ip i nie mają przekierowanych portów na routerze oraz w nawiązaniu połączenia nie pomaga zewnętrzny serwer, to ci klienci się nie połączą.

Dla przykłady w sieci edonkey wewnętrzne ip nazywa się "low id". Dwaj klienci z low id się z sobą nie połączą.

0

Tak, rozumiem to. Jednak jakoś Torrenty zostały zrobione, teraz już nie potrzeba trackerów, tylko magnet linki - dokładnie jak w moim projekcie. Ale to jest pewnie kwestia protokołu...

0

Jeśli znałbyś podstawy działania protokołu IP to byś wiedział że się nie da, z powodów wyżej opisanych. Wszystkie DHT itp. nadal wymagają żebyś znał adresy IP choć kilku węzłów, nie jest możliwe połączenie dwóch komputerów jeśli choć jeden nie ma "zewnętrzengo" ip oraz nie jest możliwe zainicjowanie połączenia od węzłu z zewnętrznym ip do tego bez - polecenie/prośba o połączenie musi dojść do tego drugiego węzła z innego źródła.

0

Czyli kwestia komunikatora rozproszonego komplikuje się ogromnie i jest niewykonalna? Bo, jeśli w koncepcji zostaną wprowadzone jakieś uprzywilejowane węzły - czyli pewnie serwery to nie będzie już to komunikator rozproszony...

0

Załóż konto na google drive i utwórz tam plik w który będą wszystkie adresy IP i daj aplikacji hasło do twojego konta albo zrób, żeby aplikacja próbowała się łączyć na wszystkie adresy, jakie istnieją (:

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