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 godziny
  • Lokalizacja:Tuchów
  • Postów:12164
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: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:ponad 9 lat
  • Ostatnio:9 dni
  • Postów:1082
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: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: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:ponad 9 lat
  • Ostatnio:9 dni
  • Postów:1082
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)