Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przekierowywanie portów

Ostatnio zmodyfikowano 2012-06-17 15:43
Autor Wiadomość
pekfos
» 2012-06-16 19:16:46
No właśnie o to chodzi, jak uniknąć zmuszania klientów do grzebania przy routerze
A co ja napisałem?
Wyjaśnij, po co ruter miałby się wcinać w połączenia wychodzące?

//Jakby nie było dość jasne:
Gdy celujesz w komputer o adresie x.y.z.q to możesz trafić w ruter. Ruter przekierowuje to jakiegoś komputera 192.168.1.x który to obsługuje. Jak nie ma ustawionego przekierowania to zatrzyma się na ruterze.
Klient nic nie musi robić, bo to nie w niego celują, no nie?
P-58578
kampar
Temat założony przez niniejszego użytkownika
» 2012-06-16 19:21:44
napisałem to przed twoją wiadomością :) Przeczytaj edit.
Przecież klient nie tylko wysyła pakiety, ale też musi je odbierać.
P-58579
pekfos
» 2012-06-16 19:26:15
Przeczytaj lepiej ten kurs.
P-58581
kampar
Temat założony przez niniejszego użytkownika
» 2012-06-16 19:33:05
czytałem ten kurs i nie wiem co robię źle. Jeżeli w moim rozumowaniu jest jakiś błąd to powiedz gdzie.
P-58582
pekfos
» 2012-06-16 19:35:41
Kod zły pewnie. Lepiej się od razu przestaw na TCP. (prędzej czy później i tak to zrobisz)
P-58583
kampar
Temat założony przez niniejszego użytkownika
» 2012-06-16 19:41:28
kod nie jest zły, jak pisałem po przekierowaniu portu wszystko działa. Używam UDP, ponieważ piszę shootera, gdzie pojedyncze pakiety nie są ważne, za to liczy się szybkość. Klient musi odbierać dane od serwera (aby na przykład znać pozycję przeciwników). Więc niby w jaki sposób klient, który jest na moim komputerze ma odbierać pakiety z serwera, który znajduje się na zewnątrz routera.

EDIT: Aby pograć w Quake nie trzeba nic ruszać w routerze (klient), natomiast jeżeli chcemy założyć do niego serwer, to wtedy musimy przekierować port. I właśnie nie mam pojęcia czym różni się serwer od klienta. Przecież i klient i serwer muszą wysyłać i odbierać dane.
P-58585
Admixior
» 2012-06-17 13:43:21
//Nie za bardzo wiedziałem który aspekt klient<->serwer jest niejasny więc trochę opisałem //ale chyba o ten drugi(2.)

1.Niektóre gry są takie, że ty jesteś tylko hostem pewnej rozrywki a nie serwerem.
Czyli masz trochę większe uprawnienia. A i tak wszystko przechodzi przez serwer główny gry, który ma ustawione owe przekierowanie portów.
Nie wiem w jaki sposób się tam tworzy serwery, ale jeśli jest to wbudowane w grę to raczej tak będzie. Wygląda to mniej więcej tak:
klient(zwykły gracz) <----> serwer Quake <----> klient(twoja gra - host)
i np ty możesz wysyłać informacje do serwa że chcesz mieć grę z maksymalnie 3 drużynami po ileś tam osób na takiej mapce, ew. możesz mapę własną też wysłać.
A jeżeli serwer jest w oddzielnej appce (tudzież konsoli) jak np serwer SA-MP to wtedy ty wysyłasz do serwera sa-mp tylko swoje dane (nazwa, ip, port  i inne). Ale właściwy serw jest na twoim kompie i nie ma innego nad tobą, więc musisz mieć przekierowanie portów, inaczej nikt z poza LAN się nie połączy. Innego wyboru nie ma. A czy do gry opłaca się robić własny główny serwer, to ta decyzja zależy od Ciebie. Jeżeli jest mała gra i mało osób w nią gra to możesz sobie machnąć na jakimś starym kompie u siebie w domu, chyba że masz własny serw no to nawet nie musisz szukać starych kompów.

2. Klient normalnie łączy się z serwerem, klient zaczyna rozmowę do serwera który ma ustawione przekierowanie portu. Serwer otrzymuje wtedy strukturę "socckaddr_in" która zawiera ip i port z którego przyszło (ów port u klienta jest na routerze zapamiętany (przy UDP nie wiem jak długo) z którego wewnętrznego kompa się ktoś łączył) i serwer odpowiada na ten port(po prostu podając tę samą strukturę). A router widząc odpowiedni port wraca do odpowiedniego kompa na odpowiedni port msg z serwera.

Wysyłanie paczki:
1.Klient(ip. a.b.c.k port 7890) wysyła paczkę do routera (ip:a.b.c.r port:1234) przekazując z kim chce się połączyć
2.router zapamiętuje informacje (trzyma otwartego socketa).
3.Tworzy u siebie nowe połączenie z serwerem który klient wybrał.
4.router(ip zewnetrzne k.i.j.r port 456) wysyła do serwera(ip: 180.54.68.79 port: 667) wiadomość

Odbieranie paczki:
5.serwer(ip: 180.54.68.79 port: 667) obliczył obliczenia i odpowiada do routera(ip zewnetrzne k.i.j.r port 456)
6.router przypomina sobie że port 456 to połączenie z kompem(ip. a.b.c.k port 7890)<->(ip: routera port 1234)
7.router(ip:a.b.c.r port:1234) wysyła paczkę do klienta(ip. a.b.c.k port 7890)

Czyli w skrócie router był takim ukrytym serwerem proxy który dla programisty klienta nie odegrał większego znaczenia bo normalnie wysyłał zapytanie do serwera (zaczynał rozmowę), ale serwer już musiał mieć przekierowanie portu 667 na kompa wewnętrznego gdyż on nie rozpoczynał ale odbierał od bliżej nieznanego usera, ( a ta wiadomość nie wiadomo do kogo byłaby gdyby nie to narzędzie) ale router u serwera widząc że ma przekierowanie portów już wie do kogo to jest.
P-58595
kampar
Temat założony przez niniejszego użytkownika
» 2012-06-17 14:16:34
aha, czyli jeżeli u klienta wyślemy pakiet UDP do jakiegoś serwera, to gdy serwer wyśle pakiet do klienta, to router klienta automatycznie przekierowuje pakiet do klienta, ponieważ to klient rozpoczął połączenie i router wie, że jest ono pożądane?
P-58597
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona