Wewnętrzne IP i sockety

0

Napisałem maksymalnie prosty komunkator internetowy oparty na komponentach z BCB ClientSocket i ServerSocket. Gdy łącze się z kumplem który ma zewnętrzne ip (ja też mam zewnętrzne) wszystko działa dobrze, ale gdzy łacze sie do drugiego który ma wewnętrzne ip połaczenie niezupełnie dochodzi do skutku. To znaczy ja widze co on napisał (czyli on moze wysłać na mój ip dane) ale on nie widzi tego co ja napisałem. Czy jest jakiś spsób na rozwiązanie tego problemu? Bardzo proszę o pomoc.

0

Administrator sieci LAN może przydzielać dowolne adresy IP wewnętrznym komputerom właśnie dlatego, że takie "prywatne" adresy nie są widoczne w "globalnej" sieci Internet. LAN stanowi jakby odrębną sieć, a jedyne połączenie tej sieci z Internetem stanowi specjalny komputer, zwany Bramą, który posiada zewnętrzny adres IP.

Teraz jest tak. Twój qmpel wysyła wiadomość na twoje IP [zewnętrzne]. Jego pakiety nie znajdują tego adresu w jego sieci LAN, więc są kierowane na domyślną bramę tej sieci, która ma połączenie z Internetem. Pakiety lecą poprzez Internet i trafiają na twojego IPka ;).
Teraz ty wysyłasz wiadomość. Jeśli podajesz adres prywatny twojego qmpla, to raczej nie zostanie on znaleziony w sieci Internet, bo nie do niej należy. Może się też zdarzyć, że lokalnemu IP twojego qmpla odpowiada jakiś adres w sieci Internet i połączysz się z jakimś hostem, jednak nie będzie to twój qmpel.

Żeby przesłać do twojego qmpla, trzeba się trochę natrudzić. Po pierwsze musisz znać adres IP komputera, który łączy LAN twojego qmpla z Internetem [czyli Bramy]. Druga sprawa, że jak poślesz swój pakiet na Bramę qmpla, to ona go najpewniej odrzuci, jeśli nie ma forwardowania portu dla qmpla. Wtedy pozostaje ci jedynie tryb pasywny, czyli połączenie musi być zainicjowane od strony twojego qmpla, a ty tylko będziesz odpowiadał.

Najgorszy z możliwych przypadek (i niestety najczęstszy) to taki, gdy obie osoby nie mają zewnętrznego IP. Wtedy potrzebny jest serwer z zewnętrznym IP, z którym będą się łączyć obaj użytkownicy i cała komunikacja musi iść przez serwer.

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