Program klient serwer a zapora windows

Program klient serwer a zapora windows
WS
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

Witam piszę program klient - serwer, użyłem komponentów TServerSocket oraz TClientSocket, jak łączę się przez adres sieci wewnętrznej (po lanie) to wszystko jest ok, natomiast jak wpisze adres zewnętrzny to już sie klient z serwerem nie łączy. Mam w domu router ale to już chyba standard. Dodatkowo przy pierwszym uruchomieniu programu serwer na komputerze wyskakuje okno zapory Windows z info czy pozwolić programowi na nasłuchiwanie połączeń przychodzących.

Pytania:

  1. Jaka może być przyczyna braku połączenia przy IP zewnętrznym / publicznym?
  2. Jaka jest różnica między TServerSocket - TClientSocket oraz TTcpServer - TTcpClient?
  3. Jak ominąć / dodać regułę do zapory Windows bez wyświetlania na ekranie informacji o nasłuchiwaniu połączeń przychodzących przez program?
edytowany 1x, ostatnio: bogdans
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Tuchów
  • Postów:12172
0

I nie działa nawet jeśli dodasz (choćby ręcznie) regułkę do zapory?

Co do automatu to zobacz tutaj – https://stackoverflow.com/questions/9180348/delphi-7-windows-vista-7-firewall-exception-network-locations


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
WS
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

W lanie jak zaakceptuje info od zapory by puszczał połączenia to działa a jak łacze sie przez ip publiczne to dostaje "Asynchronous socket error 10060" nie pokazuje sie info z zapory.

edit:
mam problem z kodem który podałeś w linku

Kopiuj
const
  NET_FW_PROFILE2_DOMAIN  = 1;
  NET_FW_PROFILE2_PRIVATE = 2;
  NET_FW_PROFILE2_PUBLIC  = 4;
  NET_FW_IP_PROTOCOL_TCP  = 6;
  NET_FW_ACTION_ALLOW     = 1;
var
  fwPolicy2      : OleVariant;
  RulesObject    : OleVariant;
  Profile        : Integer;
  NewRule        : OleVariant;
begin
  Profile             := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
  fwPolicy2           := CreateOleObject('HNetCfg.FwPolicy2');
  RulesObject         := fwPolicy2.Rules;
  NewRule             := CreateOleObject('HNetCfg.FWRule');
  NewRule.Name        := Caption;
  NewRule.Description := Caption;
  NewRule.Applicationname := Executable;
  NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP;
  NewRule.Enabled := TRUE;
  NewRule.Profiles := Profile;
  NewRule.Action := NET_FW_ACTION_ALLOW;
  RulesObject.Add(NewRule);

Dokładnie w miejscu NewRule.Applicationname := Executable; przy próbie kompilacji mam błąd: undeclared identifer Executable, musze dodać jakiś uses do programu?

edytowany 2x, ostatnio: flowCRANE
flowCRANE
Kod wstawiaj w znaczniki dla kodu, nie te dla cytowania.
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
1

Caption to nazwa reguły w zasadzie dowolna (pod tą nazwą zostanie zapisana reguła) a Executable to nazwa wraz ze ścieżką pliku, który dodajesz do wyjątków zapory.

10060 albo blokada połączenia (firewall) albo w ogóle klient "nie widzi" adresu serwera łatwo sprawdzić czy działa choćby ping od klienta na komp serwera (jak coś to pomoże przekierowanie portów na ruterze).

Nie wiem jakiej wersji Delphi używasz ale obie klasy raczej nie dzisiejsze a już zdecydowanie nie powinno się używać TServerSocket i TClientSocket ponieważ pochodzą z modułu ScktComp, który od dawna jest przestarzały (deprecated) i zostały one zastąpione właśnie przez TTcpServer i TTcpClient. Obecnie pisząc aplikację jeżeli nie chcemy nic co trzeba osobno doinstalować to można użyć odpowiednich komponentów Indy czyli TIdTCPServer i TIdTCPClient.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
MY
  • Rejestracja:prawie 10 lat
  • Ostatnio:15 dni
  • Postów:1083
0
wujek samozuo napisał(a):

Mam w domu router ale to już chyba standard.

A w jakim kierunku się łączysz? Serwer stoi za routerem, czy serwer stoi gdzieś w internecie i próbujesz się ze swojego komputera podłączyć. Bo troszkę niedokładnie to opisałeś. Jeśli serwer stoi za routerem to trzeba przekierować porty. Inaczej nie pójdzie.

WS
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

@kAzek Rozumiem że słowo 'Caption' mogę zastąpić dowolnym słowem natomiasc 'Executable' tak jak napisałeś nazwą programu wraz z jego ścieżką?
Używam Delphi 7 tak jak to oznaczyłem tagiem w temacie.
Odnośnie 'TServerSocket' przestarzały znaczy bezużyteczny czy raczej o słabych możliwościach?

@Mr.YaHooo serwer i klient jest na tym samym kompie z Vistą za routerem, ale to może być wina mojego neta z netii coś to mam nie tak bo pomimo przekierowania portów nie moge postawić serwera www ftp itp. Musiał bym spróbować na innym łączu.

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

@wujek samozuo tak dobrze rozumiesz (z tym że Caption nie tylko pojedynczym słowem ale i zdaniem) a co do tego że przestarzałe to nie tylko słabe możliwości ale istnieje także ryzyko, że na nowych systemach coś nie zadziała jak powinno ale to dotyczy tak samo starej wersji Delphi. Po prostu to było w czasach Windows XP i na tym systemie było oficjalnie testowane ale może nie będzie problemu.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
WS
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

Zrobiłem tak:

Kopiuj
procedure TForm1.FormActivate(Sender : TObject);
const
  NET_FW_PROFILE2_DOMAIN  = 1;
  NET_FW_PROFILE2_PRIVATE = 2;
  NET_FW_PROFILE2_PUBLIC  = 4;
  NET_FW_IP_PROTOCOL_TCP  = 6;
  NET_FW_ACTION_ALLOW     = 1;
var
  fwPolicy2      : OleVariant;
  RulesObject    : OleVariant;
  Profile        : Integer;
  NewRule        : OleVariant;
begin
  Profile             := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
  fwPolicy2           := CreateOleObject('HNetCfg.FwPolicy2');
  RulesObject         := fwPolicy2.Rules;
  NewRule             := CreateOleObject('HNetCfg.FWRule');
  NewRule.Name        := 'serwer';
  NewRule.Description := 'reguła przepuszczania serwera';
  NewRule.Applicationname := 'C:\ścieżka_do_pliku\nazwa_pliku.exe';
  NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP;
  NewRule.Enabled := TRUE;
  NewRule.Profiles := Profile;
  NewRule.Action := NET_FW_ACTION_ALLOW;
  RulesObject.Add(NewRule);
end;

Po odpaleniu dostaję okno małe z nazwą programu w nagłówku oraz treścią "odmowa dostępu" oraz pojawia sie okno zapory windows z info iż program chce nasłuchiwać połączenia przychodzące. Wszystko działa jak odpale program z prawami administratora

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

No i tak ma być w systemach nowszych niż XP (a może z XP włącznie - nie pamiętam) nie dodasz reguł do zapory bez praw admina.
Tylko nie wiem czy za każdym uruchomieniem próbujesz dodać regułę czy sprawdzasz czy już takiej nie ma, poza tym sprawdź w ustawieniach zapory czy reguła została dodana poprawnie.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
WS
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

Za kazdym razem sprawdzam czy revula zostala dodana i pozniej ew ja kasuje by sprawdzic ponownie czy program dziala poprawnie. Zatem treba odpalic program z prawami admina bez admina

edytowany 1x, ostatnio: flowCRANE
MY
  • Rejestracja:prawie 10 lat
  • Ostatnio:15 dni
  • Postów:1083
1
wujek samozuo napisał(a):

@Mr.YaHooo serwer i klient jest na tym samym kompie z Vistą za routerem, ale to może być wina mojego neta z netii coś to mam nie tak bo pomimo przekierowania portów nie moge postawić serwera www ftp itp. Musiał bym spróbować na innym łączu.

Ale to nic, sprawdź czy przypadkiem router Netii nie blokuje. Moim zdaniem i tak próba łączenia się z komputerem po IP zewnętrznym powoduje próbę łączenia się z routerem/modemem. A postawić www/ftp nie dasz ray właśnie z powodu braku przekierowania. Na próbę wstaw swój komputer do DMZ i zobacz czy nie pójdzie. Moim zdaniem pójdzie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.