client , serwer programy napisane w delphi, jak ich używać w internetowej sieci WIFI ,ruter
Kluczowe punkty
• Stały lokalny IP serwera (rezerwacja DHCP lub ręczne IP)
• Otwarcie/zezwolenie na ruch na wybranym porcie w firewallu OS i routera
• Port-forwarding lub alternatywnie VPN/tunel (WireGuard, ZeroTier, ngrok)
• Komponenty sieciowe Delphi (Indy, ICS, TClientSocket/TServerSocket, RESTClient)
1.1 Adresacja
‐ Router Wi-Fi (gateway) tworzy NAT; urządzenia w LAN dostają adresy prywatne (192.168.x.x / 10.x.x.x).
‐ Do pracy tylko w LAN klient podaje adres prywatny serwera.
‐ Dla dostępu z Internetu potrzebny jest publiczny adres IP lub nazwa DDNS (np. mojaapka.ddns.net).
1.2 Porty
‐ Serwer musi nasłuchiwać na stałym porcie (>1024, np. 54321 TCP).
‐ Port nie może kolidować z usługami systemowymi i powinien być otwarty w zaporze.
1.3 Przekierowanie (NAT / Port Forwarding)
‐ Na routerze definiujemy regułę: WAN port 54321 → LAN IP 192.168.1.150:54321 (TCP).
‐ CG-NAT u operatora uniemożliwia przekierowanie – wtedy: wykup statyczny IP, tunel VPN lub serwis pośredniczący (np. ngrok, Cloudflare Tunnel).
2.1 Komponenty
‐ Indy: TIdTCPServer, TIdTCPClient (pełne sterowanie protokołem).
‐ ICS/Overbyte: wielowątkowe, zdarzeniowe gniazda.
‐ Sockety WinAPI: TServerSocket, TClientSocket (klasyczne VCL).
‐ RESTClient / FireDAC / DataSnap / RAD Server – gotowe warstwy wyższego poziomu (HTTP/REST).
‐ Dla IoT/małego ruchu: MQTT (komponenty Mosquitto/MQTTClient).
2.2 Kod (prosty przykład TCP Indy)
Serwer:
IdTCPServer1.DefaultPort := 54321;
IdTCPServer1.Bindings.Clear; // 0.0.0.0 = wszystkie interfejsy
IdTCPServer1.Bindings.Add.IP := '0.0.0.0';
IdTCPServer1.Active := True;
Klient:
IdTCPClient1.Host := '192.168.1.150'; // lub publiczny/DDNS
IdTCPClient1.Port := 54321;
IdTCPClient1.ConnectTimeout := 5000;
IdTCPClient1.Connect;
‐ TLS/SSL: TIdServerIOHandlerSSLOpenSSL + TIdSSLIOHandlerSocketOpenSSL.
‐ Uwierzytelnianie tokenem/JWT lub hasłem (co najmniej SHA-256 + salt).
‐ Walidacja danych (protokół binarny lub JSON z CRC/HMAC).
‐ Możliwie VPN site-to-site (WireGuard/OpenVPN) – wówczas nie otwieramy portów publicznie.
‐ ipconfig / ifconfig – sprawdzenie IP; netstat -an – otwarte porty.
‐ Wireshark – podgląd ruchu, czy pakiety dochodzą.
‐ Canyouseeme.org – zdalny test otwarcia portu.
‐ Wielowątkowy serwer (Indy IdThreadMgrDefault, ICS TWSocketThrd).
‐ Buforowanie i kompresja (zlib) przy dużym ruchu.
‐ Timeouty i keep-alive (SO_KEEPALIVE, aplikacyjny ping).
‐ Delphi 12 Athens wprowadził oficjalne wsparcie OpenSSL 3 oraz HTTP/2 (indy/REST).
‐ Coraz częściej stosuje się protokół gRPC (biblioteka Grijjy gRPC/Protobuf w Delphi).
‐ QUIC/HTTP 3 – projekty open-source (Delphi-QUIC) pozwalają ominąć ograniczenia NAT przy UDP.
‐ ZeroTier/Headscale zyskują popularność jako „serwerless VPN” – brak potrzeby port-forwardingu.
‐ Adres 0.0.0.0 w Bindings oznacza, że serwer akceptuje połączenia na wszystkich interfejsach (Ethernet, Wi-Fi, VPN).
‐ CG-NAT = adres publiczny dzielony; zapytaj ISP o „publiczne IPv4” lub przejdź na IPv6 (port-forwarding zbędny, ale wymaga konfigurowalnego firewalla).
‐ DDNS klient w routerze automatycznie aktualizuje hosta, np. mojaapka.ddns.net => 83.12.34.56.
‐ Dane osobowe – transmisja musi spełniać RODO (szyfrowanie end-to-end, minimalizacja danych).
‐ Otwarcie portu w sieci firmowej może naruszać politykę bezpieczeństwa – uzyskać akceptację działu IT.
‐ Licencje: OpenSSL wymaga dołączenia plików licencyjnych, a DataSnap/FireDAC mogą wymagać licencji Enterprise.
‐ Zacznij od LAN-only; gdy działa, dopiero otwieraj się na WAN.
‐ Zawsze loguj zdarzenia sieciowe (połączenia, wyjątki, czas odpowiedzi).
‐ Używaj statycznych numerów portów w pliku konfiguracyjnym, nie w kodzie.
‐ Rozważ separację serwera w kontenerze Docker + NAT maszynowy (łatwiejsza migracja).
‐ ISP z CG-NAT: brak możliwości przekierowania portów → tylko VPN/Tunnel.
‐ Mobilne sieci mogą dynamicznie zmieniać IPv4/IPv6; utrzymuj mechanizm reconnect/heartbeat.
‐ Przepustowość Wi-Fi może być niestabilna (interferencje, roaming). Warto implementować adaptacyjne buforowanie.
‐ Implementacja gRPC lub WebSocket w Delphi (biblioteki Delphi-Websockets).
‐ Automatyczne testy integracyjne sieciowe (DUnitX + serwer w Docker).
‐ Wydajność na ARM (Raspberry Pi) – cross-kompilacja FMX/Delphi Linux.
‐ Bezpieczne wdrożenie z użyciem Infrastructure-as-Code (Ansible/RouterOS API).
Aby uruchomić aplikację klient–serwer Delphi przez Wi-Fi/Internet:
Stosując powyższe kroki, aplikacje Delphi będą działały niezawodnie zarówno w sieci lokalnej Wi-Fi, jak i poprzez Internet.