Sign in Join
Wiki copytemporary

Networking/pl: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-<div style="font-size:1.88em;margin:0.75em 0;">
2-
31Sieć
4-
5-</div>
62
73Ta strona zawiera zarówno poradniki/kod, jak i informacje dotyczące programowania sieciowego za pomocą Lazarusa oraz zwykłego FPC.
84
95## Protokół TCP/IP
106
117> **Note:** Ponieważ istnieje wiele bibliotek (Synapse, lnet, fphttpclient, Indy,...), które zapewniają funkcjonalność sieciową dla FPC/Lazarus, wiele przykładów można napisać dla wielu bibliotek. Dlatego możesz zobaczyć te same przykłady wiele razy - dla różnych bibliotek. Spójrz na frameworki [[Brook for Free Pascal/pl|Brook dla Free Pascal]] lub [fpctwit](https://bitbucket.org/mararosas/fpctwit/src/default/), aby zobaczyć przykłady tworzenia frameworków, które mogą korzystać z wielu bibliotek sieciowych
128
139### CGI/FastCGI - REST, CRUD, czat, blog, strona internetowa itp.
1410
1511Tych funkcji można używać z [[fcl-web]]. Są również wbudowane do frameworka Brook. Proszę spojrzeć na [tą stronę](http://silvioprog.github.io/brookframework) <https://github.com/silvioprog/brookframework>
1612
1713### Klient SSH/Telnet, wysyłanie e-maili, pobieranie plików, przykłady OAuthv1
1814
1915Zobacz stronę [[Synapse]].
2016
2117### Przykład serwera WWW
2218
2319Poniżej podano przykładowy serwer http napisany za pomocą [[Synapse]] i przetestowany w Win XP i macOS, po zmianie źródła Synapse tak, aby używał poprawnej stałej \$20000 jako MSG_NOSIGNAL, ponieważ ta stała nie występuje w module sockets w systemie macOS. *Uwaga: prosimy o przesyłanie raportów o błędach do projektu Synapse - są one dość responsywne - więc każdy zyskuje na ulepszeniach. Do zrobienia: sprawdzić, czy ta modyfikacja jest nadal potrzebna dla obecnej (październik 2012) wersji Synapse*
2420
2521``` pascal
2622{
2723 Serwer WWW Micro Pascal
2824
2925 To bardzo prosty przykładowy serwer WWW zaimplementowany przy pomocy biblioteki Synapse.
3026
3127 Działa z gniazdami blokującymi i pojedynczym wątkiem, więc
3228 może obsłużyć tylko jedno żądanie w danym momencie.
3329
3430 Zapisuje nagłówki, które otrzymuje z przeglądarki
3531 na standardowe wyjście.
3632
3733 Obsługuje poprawnie stronę internetową dla / URI
3834 Dla jakiegoś innego identyfikatora URI zwróci błąd 404 nie znaleziono
3935
4036}
4137
4238program upserver;
4339
4440{$ifdef fpc}
4541 {$mode delphi}
4642{$endif}
4743
4844{$apptype console}
4945
5046uses
5147 Classes, blcksock, sockets, Synautil, SysUtils;
5248
5349{@@
5450 Uczestniczy w połączeniu. Czyta nagłówki i daje
5551 właściwą odpowiedź
5652}
5753
5854procedure AttendConnection(ASocket: TTCPBlockSocket);
5955var
6056 timeout: integer;
6157 s: string;
6258 method, uri, protocol: string;
6359 OutputDataString: string;
6460 ResultCode: integer;
6561begin
6662 timeout := 120000;
6763
6864 WriteLn('Otrzymane nagłówki+dokument z przeglądarki:');
6965
7066 //przeczytaj wiersz żądania
7167 s := ASocket.RecvString(timeout);
7268 WriteLn(s);
7369 method := fetch(s, ' ');
7470 uri := fetch(s, ' ');
7571 protocol := fetch(s, ' ');
7672
7773 //przeczytaj nagłówki żądań
7874 repeat
7975 s := ASocket.RecvString(Timeout);
8076 WriteLn(s);
8177 until s = '';
8278
8379 // Teraz zapisz dokument do strumienia wyjściowego
8480
8581 if uri = '/' then
8682 begin
8783
8884 // Zapisz dokument wyjściowy do strumienia
8985 OutputDataString :=
9086 '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
9187 + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF
9288 + '<html><h1>Teste</h1></html>' + CRLF;
9389
9490 // Wyślij nagłówki z powrotem do klienta
9591 ASocket.SendString('HTTP/1.0 200' + CRLF);
9692 ASocket.SendString('Content-type: Text/Html' + CRLF);
9793 ASocket.SendString('Content-length: ' + IntTostr(Length(OutputDataString)) + CRLF);
9894 ASocket.SendString('Connection: close' + CRLF);
9995 ASocket.SendString('Date: ' + Rfc822DateTime(now) + CRLF);
10096 ASocket.SendString('Server: Serwer Felipe używający Synapse' + CRLF);
10197 ASocket.SendString('' + CRLF);
10298
10399 // if ASocket.lasterror <> 0 then HandleError;
104100
105101 // Wyślij dokument z powrotem do przeglądarki
106102 ASocket.SendString(OutputDataString);
107103 end
108104 else
109105 ASocket.SendString('HTTP/1.0 404' + CRLF);
110106end;
111107
112108var
113109 ListenerSocket, ConnectionSocket: TTCPBlockSocket;
114110
115111begin
116112 ListenerSocket := TTCPBlockSocket.Create;
117113 ConnectionSocket := TTCPBlockSocket.Create;
118114
119115 ListenerSocket.CreateSocket;
120116 ListenerSocket.setLinger(true,10);
121117 ListenerSocket.bind('0.0.0.0','1500');
122118 ListenerSocket.listen;
123119
124120 repeat
125121 if ListenerSocket.canread(1000) then
126122 begin
127123 ConnectionSocket.Socket := ListenerSocket.accept;
128124 WriteLn('Attending Connection. Error code (0=Success): ', ConnectionSocket.lasterror);
129125 AttendConnection(ConnectionSocket);
130126 ConnectionSocket.CloseSocket;
131127 end;
132128 until false;
133129
134130 ListenerSocket.Free;
135131 ConnectionSocket.Free;
136132end.
137133```
138134
139135### Klient TCP/IP — przykład serwera z wbudowanymi komponentami FCL-Net
140136
141137Proszę spojrzeć na [ten wpis na blogu](http://pascalgeek.blogspot.com/2012/06/encryption-decryption-and-asynchronous.html) Niestety, ze względu na zależność od biblioteki fp_async, jest ona dostępna tylko w systemie Unix.
142138
143139### Pobierz treść strony HTTP, wyślij dane do serwera WWW za pomocą POST, uzyskaj zewnętrzny adres IP
144140
145141Te przykłady (przy użyciu FPC/Lazarus wbudowanego w fphttpclient) można znaleźć w [[fphttpclient|przykładach fphttpclient]]
146142
147143### LazWebsockets
148144
149145WebSocket to trwałe połączenie między klientem a serwerem. WebSockets zapewniają dwukierunkowy, pełnodupleksowy kanał komunikacyjny, który działa za pośrednictwem protokołu HTTP za pomocą pojedynczego połączenia gniazd TCP/IP. W swej istocie protokół WebSocket ułatwia przekazywanie wiadomości między klientem a serwerem. [LazWebsockets](https://github.com/Warfley/LazWebsockets) zapewnia małą implementację serwera i klienta Websocket napisaną dla FPC i Lazarusa. Serwer ten opiera się na module gniazd FCL, a zatem jest niezależny od wszelkich dodatkowych zależności. Można go łatwo zbudować używając tylko FPC bez Lazarusa. Istnieje przykładowe demo serwera i klienta czatu.
150146
151147## Usługi internetowe
152148
153149Według [W3C](http://www.w3.org/) usługa sieciowa to system oprogramowania zaprojektowany do obsługi interoperacyjnej interakcji maszyna-maszyna w sieci. Posiada interfejs opisany w formacie przetwarzalnym maszynowo, takim jak WSDL. Inne systemy współdziałają z usługą sieciową w sposób określony przez jej interfejs, używając komunikatów, które mogą być zamknięte w powłoce SOAP lub postępować zgodnie z podejściem REST. Komunikaty te są zazwyczaj przesyłane za pomocą protokołu HTTP i zwykle składają się z XML w połączeniu z innymi standardami związanymi z Internetem. Aplikacje napisane w różnych językach programowania i działające na różnych platformach mogą wykorzystywać usługi sieciowe do wymiany danych w sieciach komputerowych, takich jak Internet, w sposób podobny do komunikacji międzyprocesowej na jednym komputerze. Ta interoperacyjność (np. między aplikacjami Windows i Linux) wynika z użycia otwartych standardów. OASIS i W3C są głównymi komitetami odpowiedzialnymi za architekturę i standaryzację usług sieciowych. Aby poprawić interoperacyjność między wdrożeniami usług internetowych, organizacja WS-I opracowała szereg profili w celu dalszego zdefiniowania odpowiednich standardów.
154150
155151### Przykład RSS
156152
157153Aby zapoznać się z przykładem RSS, zobacz ten artykuł [[RSS|Moduł RSS]].
158154
159155### Web Service Toolkit dla FPC i Lazarusa
160156
161157[[Web Service Toolkit]] to pakiet usług internetowych dla FPC i Lazarusa.
162158
163159### Używanie Tłumacza Google
164160
165161Aby zapoznać się z przykładem korzystania z usługi tłumaczenia Google, zobacz artykuł [[Using Google Translate]], który wykorzystuje komponent [[fphttpclient]] z pakietu [[fcl-web]].
166162
167163## Zobacz także
168164
169165- [[Portal:Web Development|Portal do tworzenia stron internetowych]]
170166- [[Brook for Free Pascal/pl|Brook dla Free Pascal]] - Idealny framework Free Pascal dla Twoich aplikacji internetowych. To czysty Pascal. Nie musisz porzucać preferowanego języka programowania.
171167- [[fcl-net]] - Biblioteka sieciowa dostarczana z FPC
172168- [[fcl-web]] - Znana również jako fpWeb, jest to biblioteka do tworzenia aplikacji internetowych, które można wdrażać jako moduły cgi, fastcgi lub apache.
173169- [[fpbrowser]] - przeglądarka internetowa napisana w FPC + Lazarus.
174170- [[Indy with Lazarus|Indy z Lazarusem]] - Komponenty sieciowe;Poradnik, jak zainstalować
175171- [[Internet Tools|Narzędzia internetowe]] - Wrapper wokół komponentów HTTP Synapse/WinInet/Android upraszczający obsługę HTTPS i przekierowań oraz silnik XPath/XQuery/Selektor CSS/JSONiq do przetwarzania pobranych stron.
176172- [[FPC and Apache Modules|FPC i Moduły Apache]]
177173- [[lNet]] - Lekkie komponenty sieciowe
178174- [[Networking libraries|Biblioteki sieciowe]] - porównanie różnych bibliotek sieciowych
179175- [[OpenURL]] - otwiera adres URL z domyślną/zarejestrowaną/preferowaną przeglądarką internetową określoną przez system operacyjny.
180176- [[Secure programming|Bezpieczne programowanie]]
181177- [[Sockets]] - Komponenty gniazd TCP/IP
182178- [[Synapse]] - Port szeregowy i synchroniczna biblioteka TCP/IP
183179- [[XML Tutorial|Poradnik XML]] - XML jest często używany w komunikacji sieciowej
184180
185181### macOS
186182
187183- [[macOS NSURLConnection]] Ten interfejs API umożliwia ładowanie zawartości adresu URL za pośrednictwem protokołu HTTP i HTTPS przez udostępnienie żądanego obiektu z adresu URL.
188184- [[macOS NSURLSession]] Ta klasa i powiązane klasy zapewniają interfejs API do pobierania treści za pośrednictwem protokołów HTTP i HTTPS.
189185- [[macOS Open Sesame|polecenie otwarcia w macOS]] Otwiera adres URL w domyślnej przeglądarce internetowej.
190186
191187### Windows
192188
193189- [[Windows Programming Tips|WinInet]] (Internet w Windows) Interfejs API, który umożliwia aplikacji interakcję z protokołami FTP i HTTP w celu uzyskania dostępu do zasobów internetowych.
194190
195191## Linki zewnętrzne
196192
197193- [Fano Framework](https://fanoframework.github.io) - Framework aplikacji webowych napisany w Free Pascal.
198194- [FastPlaz](http://www.fastplaz.com) - Fast Web Framework dla Pascala. Więcej funkcji, takich jak motyw/szablon, prosty model, sesja, mailer itp.
199195
200196---
201197*From the Free Pascal wiki, page "Networking/pl", as it stood on 2021-12-10 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history