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