Networking/pl

From Free Pascal wiki
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) polski (pl) português (pt) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

Sieć

Ta strona zawiera zarówno poradniki/kod, jak i informacje dotyczące programowania sieciowego za pomocą Lazarusa oraz zwykłego FPC.

Protokół TCP/IP

Note-icon.png

Uwaga: 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 dla Free Pascal lub fpctwit, aby zobaczyć przykłady tworzenia frameworków, które mogą korzystać z wielu bibliotek sieciowych

CGI/FastCGI - REST, CRUD, czat, blog, strona internetowa itp.

Tych funkcji można używać z fcl-web. Są również wbudowane do frameworka Brook. Proszę spojrzeć na tą stronę https://github.com/silvioprog/brookframework

Klient SSH/Telnet, wysyłanie e-maili, pobieranie plików, przykłady OAuthv1

Zobacz stronę Synapse.

Przykład serwera WWW

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

{
  Serwer WWW Micro Pascal

  To bardzo prosty przykładowy serwer WWW zaimplementowany przy pomocy biblioteki Synapse.

  Działa z gniazdami blokującymi i pojedynczym wątkiem, więc
  może obsłużyć tylko jedno żądanie w danym momencie.

  Zapisuje nagłówki, które otrzymuje z przeglądarki
  na standardowe wyjście.

  Obsługuje poprawnie stronę internetową dla / URI
  Dla jakiegoś innego identyfikatora URI zwróci błąd 404 nie znaleziono

}

program upserver;

{$ifdef fpc}
  {$mode delphi}
{$endif}

{$apptype console}

uses
  Classes, blcksock, sockets, Synautil, SysUtils;

{@@
  Uczestniczy w połączeniu. Czyta nagłówki i daje
  właściwą odpowiedź
}

procedure AttendConnection(ASocket: TTCPBlockSocket);
var
  timeout: integer;
  s: string;
  method, uri, protocol: string;
  OutputDataString: string;
  ResultCode: integer;
begin
  timeout := 120000;

  WriteLn('Otrzymane nagłówki+dokument z przeglądarki:');

  //przeczytaj wiersz żądania
  s := ASocket.RecvString(timeout);
  WriteLn(s);
  method := fetch(s, ' ');
  uri := fetch(s, ' ');
  protocol := fetch(s, ' ');

  //przeczytaj nagłówki żądań
  repeat
    s := ASocket.RecvString(Timeout);
    WriteLn(s);
  until s = '';

  // Teraz zapisz dokument do strumienia wyjściowego

  if uri = '/' then
  begin

    // Zapisz dokument wyjściowy do strumienia
    OutputDataString :=
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
      + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF
      + '<html><h1>Teste</h1></html>' + CRLF;

    // Wyślij nagłówki z powrotem do klienta
    ASocket.SendString('HTTP/1.0 200' + CRLF);
    ASocket.SendString('Content-type: Text/Html' + CRLF);
    ASocket.SendString('Content-length: ' + IntTostr(Length(OutputDataString)) + CRLF);
    ASocket.SendString('Connection: close' + CRLF);
    ASocket.SendString('Date: ' + Rfc822DateTime(now) + CRLF);
    ASocket.SendString('Server: Serwer Felipe używający Synapse' + CRLF);
    ASocket.SendString('' + CRLF);

  //  if ASocket.lasterror <> 0 then HandleError;

    // Wyślij dokument z powrotem do przeglądarki
    ASocket.SendString(OutputDataString);
  end
  else
    ASocket.SendString('HTTP/1.0 404' + CRLF);
end;

var
  ListenerSocket, ConnectionSocket: TTCPBlockSocket;

begin
  ListenerSocket := TTCPBlockSocket.Create;
  ConnectionSocket := TTCPBlockSocket.Create;

  ListenerSocket.CreateSocket;
  ListenerSocket.setLinger(true,10);
  ListenerSocket.bind('0.0.0.0','1500');
  ListenerSocket.listen;

  repeat
    if ListenerSocket.canread(1000) then
    begin
      ConnectionSocket.Socket := ListenerSocket.accept;
      WriteLn('Attending Connection. Error code (0=Success): ', ConnectionSocket.lasterror);
      AttendConnection(ConnectionSocket);
      ConnectionSocket.CloseSocket;
    end;
  until false;

  ListenerSocket.Free;
  ConnectionSocket.Free;
end.

Klient TCP/IP — przykład serwera z wbudowanymi komponentami FCL-Net

Proszę spojrzeć na ten wpis na blogu Niestety, ze względu na zależność od biblioteki fp_async, jest ona dostępna tylko w systemie Unix.

Pobierz treść strony HTTP, wyślij dane do serwera WWW za pomocą POST, uzyskaj zewnętrzny adres IP

Te przykłady (przy użyciu FPC/Lazarus wbudowanego w fphttpclient) można znaleźć w przykładach fphttpclient

LazWebsockets

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 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.

Usługi internetowe

Według W3C 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.

Przykład RSS

Aby zapoznać się z przykładem RSS, zobacz ten artykuł Moduł RSS.

Web Service Toolkit dla FPC i Lazarusa

Web Service Toolkit to pakiet usług internetowych dla FPC i Lazarusa.

Używanie Tłumacza Google

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.

Zobacz także

  • Portal do tworzenia stron internetowych
  • Brook dla Free Pascal - Idealny framework Free Pascal dla Twoich aplikacji internetowych. To czysty Pascal. Nie musisz porzucać preferowanego języka programowania.
  • fcl-net - Biblioteka sieciowa dostarczana z FPC
  • 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.
  • fpbrowser - przeglądarka internetowa napisana w FPC + Lazarus.
  • Indy z Lazarusem - Komponenty sieciowe;Poradnik, jak zainstalować
  • 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.
  • FPC i Moduły Apache
  • lNet - Lekkie komponenty sieciowe
  • Biblioteki sieciowe - porównanie różnych bibliotek sieciowych
  • OpenURL - otwiera adres URL z domyślną/zarejestrowaną/preferowaną przeglądarką internetową określoną przez system operacyjny.
  • Bezpieczne programowanie
  • Sockets - Komponenty gniazd TCP/IP
  • Synapse - Port szeregowy i synchroniczna biblioteka TCP/IP
  • Poradnik XML - XML jest często używany w komunikacji sieciowej

macOS

  • 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.
  • macOS NSURLSession Ta klasa i powiązane klasy zapewniają interfejs API do pobierania treści za pośrednictwem protokołów HTTP i HTTPS.
  • polecenie otwarcia w macOS Otwiera adres URL w domyślnej przeglądarce internetowej.

Windows

  • 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.

Linki zewnętrzne

  • Fano Framework - Framework aplikacji webowych napisany w Free Pascal.
  • FastPlaz - Fast Web Framework dla Pascala. Więcej funkcji, takich jak motyw/szablon, prosty model, sesja, mailer itp.