Klient - Serwer i forwardowanie portu

0

Witam.

Pisze program client - server na gniazdkach clientsocket i serversocket. Wszystko działa ok w mojej sieci lokalnej, ale gdy wysłałem kumplowi do innego miasta program client'a to okazało się że jest za NATem itd. Występował też błąd 10065.

Temat pisania takich komunikatorów jest oklepany i to nieźle, ale brakuje jednej waznej rzeczy która powinna byc przedstawiona też programowo.

Przeleciałem wszystkie posty na 4p (link poniżej) i tak naprawdę nie znalazłem ani jednego postu, który pokazywałby jak zrobić forwardowanie (przekierowanie portu?) tak aby mógłbym się łączyć z komputerem za NATem itd. Były same napinki w stylu: wstaw gniazdka, wrzuć trochę kodu itd. A brakuje tego jak cholera :(( Zatrzymałem się z projektowaniem na tym problemie. Szukałem też na google, ale tam same jakieś fora holenderskie i niemieckie z nic niewartymi postami lub postami jak zrobić programy klienta i serwera :/

http://4programmers.net/Forum/search.php?mode=topic&q=clientsocket&sort=time&order=DESC&limit=0&o=text&t=AND&f[]=15&f[]=1&&start=0

PYTANIE:
Czy ktoś już zrobił w delphi jakoś forwardowanie portów lub coś takiego, aby można było się połączyć z komputerem za NATem itp. rzeczami??

Jak tak to prosiłbym o wskazówki lub najlepiej jakiś kodzik. Z góry dzięki!! [soczek]

0

Hmm... Czyli chcesz napisać program zajmujący się forwardowaniem portów. Do tego należałoby go uruchomić na routerze. Szczerze mówiąc marne szanse, by router chodził pod Windowsem i mógł odpalać programy napisane w Delphi. Każdy router jest inny, ale najczęściej tego typu maszyny chodzą na jakichś systemach unix-o pochodnych. Stąd dość prosty wniosek - nie baw się w pisanie takiej aplikacji, tylko skonfiguruj routera.

0

No nie za bardzo chcę robić program do forwardowania tylko zwykły program do wysyłania tekstu w dwie strony między dowolnymi kompami. Zastanawiam się jak jest zrobione takie gg lub tlen. Tam pewnie jest coś zawarte, to co opisałeś.

Pytanie z innej beczki:

Jakie pliki bibliotek trzeba umieścić na innym komputerze, na którym instaluję bazę danych opartą na INTERBASE?

0

Nie bardzo rozumiem o co chodzi, ale... Przede wszystkim serwer musi być postawiony na stałym IP (albo zarejestrowany w czymś takim jak noip.com) wtedy po stronie klienta nie ma znaczenia czy jest za NAT'em czy nie. W aplikacji klienta wpisujesz adres serwera i tyle (fordowaniem portów zajmuje się serwer/router). Problem Twój może wynikać z następujących rzeczy:

  1. Błąd w programie;
  2. Blokada portów na routerze;
  3. Próbujesz uruchomić serwer za NAT'em bez przekierowywania portów na serwerze;
    Mam napisaną aplikację do kopiowania plików w sieci i działa równierz za NAT'em (chodzi o klienta). Jakbyś chciał postawić serwer za NAT'em to już inna historia... (fordowanie portów na routerze)...
    Pozdrawiam
0

No właśnie ja mam stałe IP i serwer. Kumpel ma IP zmienne i jest klientem. Nie możemy się połączyć, bo co chwilę jakieś błędy w gniazdkach wyskakują (10xx). Czyli do wysyłania zwykłego tekstu z klienta do serwera nie ma do gadania NAT itd.? Albo ja coś źle kumam :)

0

A, no to inna historia :)
W opisanym przez Ciebie przypadku, jeśli masz zewnętrzny adres IP i serwer nie jest schowany, to każdy klient powinien się móc do niego podłączyć. Jeśli nie daje rady, to szukałbym źródła problemu raczej w FireWall'u albo czymś takim...
P.S. Takie głupie pytanie, czy dałeś Active = True w OI dla ServerSocket albo ServerSocket.Open; przy uruchamianiu serwera? ;)
P.S.2. W którym momencie wyskakują te błędy komunikacji? Czy pojawiają się w chwili próby połączenia, czy w momencie wysyłania tekstu? Może próbujesz wysłać tekst za wcześnie (tj. zanim się połączy do końca)?

0

Ja obstawiam, że komputer, który jest w roli serwera nie ma GLOBALNEGO IP (jest w jakiejś podsieci, ma stałe IP - to jest stałe IP, ale nie widziane przez komputery z sieci globalnej). Przekierowanie (forward) portów powinien być zrobiony na routerze brzegowym tej podsieci i sieci globalnej.

0

Adam jak piszę program jakiś to testuję go na swoim kompie, serwer i klienta sprawdzałem też na swoim (localhost), uaktywniam najpierw serwer na True, potem klienta, bo jak odwrotnie się zrobi to wyskakuje Asynchronous 10061 itd. Problemy pojawiają się gdy klient próbuje się do mnie podłączyć (komputer za NATem), więc o wysłaniu tekstu nie ma mowy. Oczywiście u siebie na kompie mam serwer aktywny, tylko on jak daje na Połącz (Active:=True) to wyskakują błędy z serii 100xx :)

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