aby zacząć dyskutować trzeba objaśnić choćby w przybliżeniu jak się sprawa ma z sieciami
1 serwer to program, który rezerwuje sobie port(właściwie socket), maszyny na której jest odpalony, do nasłuchu
2 serwer czeka na klienta i w momencie gdy klient przyjdzie tworzony jest nowy socket z losowym numerem portu i na ten nowy porty jest przeniesiona komunikacja (port do nasłuchu zostaje zwolniony).
3 podstawą do stwierdzenia czy możliwa jest komunikacja z serwerem jest możliwość puszczenia pinga do maszyny docelowej.(duże uproszczenie)
4
serwer->listen( QHostAddress::Any, 3333 )
na tak zdefiniowany socket połączysz się każdego miejsca w sieci lokalnej. Natomiast jeśli zdefiniujesz
serwer->listen( QHostAddress::locahost, 3333 )
tylko z maszyny na której jest uruchomiony serwer.
5 router to urządzenie, które tworzy sieć lokalną i ukrywa ją przed śwatem (NAT). (również upraszczam)
6 za routerem nie widać adresów IP maszyn w sieci lokalnej. (są sztuczki, które pozwalają się przebić przez nat)
7 aby przebić się przez router musisz w mu powiedzieć aby pakiety kierowane do niego przekierowywał. Taka reguła ma postać
adripRoutera:portRoutera kieruj na adresIPmaszynyLokalnej:portMaszynyWsieciLokalnej
takie przekierowanie nazywa się forwardowaniem portów i jest to opcja dostępna w każdym routerze.
8 można wystawić całą maszynę z sieci lokalnej na zewnątrz i takie przekierowanie nazywa się "DMZ". Również i ta opcja jest dostępna w większości domowych routerów
9 każda maszyna z sieci lokalnej, której komunikacja ma przechodzić przez router musi mieć ustawioną bramę!!!!!
10 wszelkiego rodzaju firewalle mogą skutecznie zablokować proces połączenia się z serwerem