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

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