Networking/pl: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | - | ||
| 2 | - | ||
| 3 | 1 | Sieć | |
| 4 | - | ||
| 5 | - | ||
| 6 | 2 | ||
| 7 | 3 | Ta strona zawiera zarówno poradniki/kod, jak i informacje dotyczące programowania sieciowego za pomocą Lazarusa oraz zwykłego FPC. | |
| 8 | 4 | ||
| 9 | 5 | ## Protokół TCP/IP | |
| 10 | 6 | ||
| 11 | 7 | > **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 | |
| 12 | 8 | ||
| 13 | 9 | ### CGI/FastCGI - REST, CRUD, czat, blog, strona internetowa itp. | |
| 14 | 10 | ||
| 15 | 11 | Tych 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> | |
| 16 | 12 | ||
| 17 | 13 | ### Klient SSH/Telnet, wysyłanie e-maili, pobieranie plików, przykłady OAuthv1 | |
| 18 | 14 | ||
| 19 | 15 | Zobacz stronę [[Synapse]]. | |
| 20 | 16 | ||
| 21 | 17 | ### Przykład serwera WWW | |
| 22 | 18 | ||
| 23 | 19 | Poniż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* | |
| 24 | 20 | ||
| 25 | 21 | ``` pascal | |
| 26 | 22 | { | |
| 27 | 23 | Serwer WWW Micro Pascal | |
| 28 | 24 | ||
| 29 | 25 | To bardzo prosty przykładowy serwer WWW zaimplementowany przy pomocy biblioteki Synapse. | |
| 30 | 26 | ||
| 31 | 27 | Działa z gniazdami blokującymi i pojedynczym wątkiem, więc | |
| 32 | 28 | może obsłużyć tylko jedno żądanie w danym momencie. | |
| 33 | 29 | ||
| 34 | 30 | Zapisuje nagłówki, które otrzymuje z przeglądarki | |
| 35 | 31 | na standardowe wyjście. | |
| 36 | 32 | ||
| 37 | 33 | Obsługuje poprawnie stronę internetową dla / URI | |
| 38 | 34 | Dla jakiegoś innego identyfikatora URI zwróci błąd 404 nie znaleziono | |
| 39 | 35 | ||
| 40 | 36 | } | |
| 41 | 37 | ||
| 42 | 38 | program upserver; | |
| 43 | 39 | ||
| 44 | 40 | {$ifdef fpc} | |
| 45 | 41 | {$mode delphi} | |
| 46 | 42 | {$endif} | |
| 47 | 43 | ||
| 48 | 44 | {$apptype console} | |
| 49 | 45 | ||
| 50 | 46 | uses | |
| 51 | 47 | Classes, blcksock, sockets, Synautil, SysUtils; | |
| 52 | 48 | ||
| 53 | 49 | {@@ | |
| 54 | 50 | Uczestniczy w połączeniu. Czyta nagłówki i daje | |
| 55 | 51 | właściwą odpowiedź | |
| 56 | 52 | } | |
| 57 | 53 | ||
| 58 | 54 | procedure AttendConnection(ASocket: TTCPBlockSocket); | |
| 59 | 55 | var | |
| 60 | 56 | timeout: integer; | |
| 61 | 57 | s: string; | |
| 62 | 58 | method, uri, protocol: string; | |
| 63 | 59 | OutputDataString: string; | |
| 64 | 60 | ResultCode: integer; | |
| 65 | 61 | begin | |
| 66 | 62 | timeout := 120000; | |
| 67 | 63 | ||
| 68 | 64 | WriteLn('Otrzymane nagłówki+dokument z przeglądarki:'); | |
| 69 | 65 | ||
| 70 | 66 | //przeczytaj wiersz żądania | |
| 71 | 67 | s := ASocket.RecvString(timeout); | |
| 72 | 68 | WriteLn(s); | |
| 73 | 69 | method := fetch(s, ' '); | |
| 74 | 70 | uri := fetch(s, ' '); | |
| 75 | 71 | protocol := fetch(s, ' '); | |
| 76 | 72 | ||
| 77 | 73 | //przeczytaj nagłówki żądań | |
| 78 | 74 | repeat | |
| 79 | 75 | s := ASocket.RecvString(Timeout); | |
| 80 | 76 | WriteLn(s); | |
| 81 | 77 | until s = ''; | |
| 82 | 78 | ||
| 83 | 79 | // Teraz zapisz dokument do strumienia wyjściowego | |
| 84 | 80 | ||
| 85 | 81 | if uri = '/' then | |
| 86 | 82 | begin | |
| 87 | 83 | ||
| 88 | 84 | // Zapisz dokument wyjściowy do strumienia | |
| 89 | 85 | OutputDataString := | |
| 90 | 86 | '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' | |
| 91 | 87 | + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF | |
| 92 | 88 | + '<html><h1>Teste</h1></html>' + CRLF; | |
| 93 | 89 | ||
| 94 | 90 | // Wyślij nagłówki z powrotem do klienta | |
| 95 | 91 | ASocket.SendString('HTTP/1.0 200' + CRLF); | |
| 96 | 92 | ASocket.SendString('Content-type: Text/Html' + CRLF); | |
| 97 | 93 | ASocket.SendString('Content-length: ' + IntTostr(Length(OutputDataString)) + CRLF); | |
| 98 | 94 | ASocket.SendString('Connection: close' + CRLF); | |
| 99 | 95 | ASocket.SendString('Date: ' + Rfc822DateTime(now) + CRLF); | |
| 100 | 96 | ASocket.SendString('Server: Serwer Felipe używający Synapse' + CRLF); | |
| 101 | 97 | ASocket.SendString('' + CRLF); | |
| 102 | 98 | ||
| 103 | 99 | // if ASocket.lasterror <> 0 then HandleError; | |
| 104 | 100 | ||
| 105 | 101 | // Wyślij dokument z powrotem do przeglądarki | |
| 106 | 102 | ASocket.SendString(OutputDataString); | |
| 107 | 103 | end | |
| 108 | 104 | else | |
| 109 | 105 | ASocket.SendString('HTTP/1.0 404' + CRLF); | |
| 110 | 106 | end; | |
| 111 | 107 | ||
| 112 | 108 | var | |
| 113 | 109 | ListenerSocket, ConnectionSocket: TTCPBlockSocket; | |
| 114 | 110 | ||
| 115 | 111 | begin | |
| 116 | 112 | ListenerSocket := TTCPBlockSocket.Create; | |
| 117 | 113 | ConnectionSocket := TTCPBlockSocket.Create; | |
| 118 | 114 | ||
| 119 | 115 | ListenerSocket.CreateSocket; | |
| 120 | 116 | ListenerSocket.setLinger(true,10); | |
| 121 | 117 | ListenerSocket.bind('0.0.0.0','1500'); | |
| 122 | 118 | ListenerSocket.listen; | |
| 123 | 119 | ||
| 124 | 120 | repeat | |
| 125 | 121 | if ListenerSocket.canread(1000) then | |
| 126 | 122 | begin | |
| 127 | 123 | ConnectionSocket.Socket := ListenerSocket.accept; | |
| 128 | 124 | WriteLn('Attending Connection. Error code (0=Success): ', ConnectionSocket.lasterror); | |
| 129 | 125 | AttendConnection(ConnectionSocket); | |
| 130 | 126 | ConnectionSocket.CloseSocket; | |
| 131 | 127 | end; | |
| 132 | 128 | until false; | |
| 133 | 129 | ||
| 134 | 130 | ListenerSocket.Free; | |
| 135 | 131 | ConnectionSocket.Free; | |
| 136 | 132 | end. | |
| 137 | 133 | ``` | |
| 138 | 134 | ||
| 139 | 135 | ### Klient TCP/IP — przykład serwera z wbudowanymi komponentami FCL-Net | |
| 140 | 136 | ||
| 141 | 137 | Proszę 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. | |
| 142 | 138 | ||
| 143 | 139 | ### Pobierz treść strony HTTP, wyślij dane do serwera WWW za pomocą POST, uzyskaj zewnętrzny adres IP | |
| 144 | 140 | ||
| 145 | 141 | Te przykłady (przy użyciu FPC/Lazarus wbudowanego w fphttpclient) można znaleźć w [[fphttpclient|przykładach fphttpclient]] | |
| 146 | 142 | ||
| 147 | 143 | ### LazWebsockets | |
| 148 | 144 | ||
| 149 | 145 | WebSocket 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. | |
| 150 | 146 | ||
| 151 | 147 | ## Usługi internetowe | |
| 152 | 148 | ||
| 153 | 149 | Wedł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. | |
| 154 | 150 | ||
| 155 | 151 | ### Przykład RSS | |
| 156 | 152 | ||
| 157 | 153 | Aby zapoznać się z przykładem RSS, zobacz ten artykuł [[RSS|Moduł RSS]]. | |
| 158 | 154 | ||
| 159 | 155 | ### Web Service Toolkit dla FPC i Lazarusa | |
| 160 | 156 | ||
| 161 | 157 | [[Web Service Toolkit]] to pakiet usług internetowych dla FPC i Lazarusa. | |
| 162 | 158 | ||
| 163 | 159 | ### Używanie Tłumacza Google | |
| 164 | 160 | ||
| 165 | 161 | Aby 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]]. | |
| 166 | 162 | ||
| 167 | 163 | ## Zobacz także | |
| 168 | 164 | ||
| 169 | 165 | - [[Portal:Web Development|Portal do tworzenia stron internetowych]] | |
| 170 | 166 | - [[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. | |
| 171 | 167 | - [[fcl-net]] - Biblioteka sieciowa dostarczana z FPC | |
| 172 | 168 | - [[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. | |
| 173 | 169 | - [[fpbrowser]] - przeglądarka internetowa napisana w FPC + Lazarus. | |
| 174 | 170 | - [[Indy with Lazarus|Indy z Lazarusem]] - Komponenty sieciowe;Poradnik, jak zainstalować | |
| 175 | 171 | - [[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. | |
| 176 | 172 | - [[FPC and Apache Modules|FPC i Moduły Apache]] | |
| 177 | 173 | - [[lNet]] - Lekkie komponenty sieciowe | |
| 178 | 174 | - [[Networking libraries|Biblioteki sieciowe]] - porównanie różnych bibliotek sieciowych | |
| 179 | 175 | - [[OpenURL]] - otwiera adres URL z domyślną/zarejestrowaną/preferowaną przeglądarką internetową określoną przez system operacyjny. | |
| 180 | 176 | - [[Secure programming|Bezpieczne programowanie]] | |
| 181 | 177 | - [[Sockets]] - Komponenty gniazd TCP/IP | |
| 182 | 178 | - [[Synapse]] - Port szeregowy i synchroniczna biblioteka TCP/IP | |
| 183 | 179 | - [[XML Tutorial|Poradnik XML]] - XML jest często używany w komunikacji sieciowej | |
| 184 | 180 | ||
| 185 | 181 | ### macOS | |
| 186 | 182 | ||
| 187 | 183 | - [[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. | |
| 188 | 184 | - [[macOS NSURLSession]] Ta klasa i powiązane klasy zapewniają interfejs API do pobierania treści za pośrednictwem protokołów HTTP i HTTPS. | |
| 189 | 185 | - [[macOS Open Sesame|polecenie otwarcia w macOS]] Otwiera adres URL w domyślnej przeglądarce internetowej. | |
| 190 | 186 | ||
| 191 | 187 | ### Windows | |
| 192 | 188 | ||
| 193 | 189 | - [[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. | |
| 194 | 190 | ||
| 195 | 191 | ## Linki zewnętrzne | |
| 196 | 192 | ||
| 197 | 193 | - [Fano Framework](https://fanoframework.github.io) - Framework aplikacji webowych napisany w Free Pascal. | |
| 198 | 194 | - [FastPlaz](http://www.fastplaz.com) - Fast Web Framework dla Pascala. Więcej funkcji, takich jak motyw/szablon, prosty model, sesja, mailer itp. | |
| 199 | 195 | ||
| 200 | 196 | --- | |
| 201 | 197 | *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).* |
