Kopia wikimirror

To jest mirror wiki z pascal.chat. Edycja, historia i logowanie są tam.

Networking/pl

한국어 · Deutsch · English · Español · Français · Polski · Português · Slovenčina · Русский · 中文(中国) · 日本語

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

pascal
{
  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

macOS

Windows

Linki zewnętrzne


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.

Wersja 2, ostatnia zmiana: WikiArchive, .