Networking/ru

From Free Pascal wiki
Jump to: navigation, search

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

Эта страница будет началом руководства по сетевому(network) програмированию в Lazarus. Я не эксперт в сетевом программировании и я буду добавлять статьи по мере моего изучения. Я приглашаю других помочь в создании статей по сетям. Просто добавьте ссылку на следующую секцию, добавьте страницу и создайте свою собственную WiKi-статью. На этой странице будет даваться общая информация.


Другие руководства по сетям

Протокол TCP/IP

Note-icon.png

Примечание: Так как существуют несколько библиотек, которые обеспечивают функционирование сети в FPC/Lazarus(Synapse, lnet, fphttpclient, Indy,...), многие примеры могут быть использованы с различными библиотеками. Посетите [1] или [2], что бы узнать, как использовать различные сетевые библиотеки.

CGI/FastCGI - REST, CRUD, чат, блог, веб-страницы и т. д.

Эти функции могут быть использованы с fcl-web. Они также построены в рамках Brook. Пожалуйста, обратите внимание на эту страницу.

SSH/Telnet клиент, отправка почты, загрузка файлов, OAuthv1 примеры

Смотрите на странице Synapse.

Пример веб-сервера

Ниже находится пример http-сервера, написанный в Synapse и оттестированный в Mac OS X, после изменения исходников synapse для использования константы $20000 как MSG_NOSIGNAL, потому что эта константа не существует в sockets unit в Mac OS X. В примере используются компоненты Ararat Synapse, которые можно получить здесь.

{
  The Micro Pascal WebServer
 
  This is a very simple example webserver implemented with the Synapse library.
 
  It works with blocking sockets and a single thread, so it
  can only handle one request at a given time.
 
  It will write the headers that it receives from the browser
  to the standard output.
 
  It serves a fixed webpage for the / URI
  For any other URI it will return 504 not found
}
program upserver;
 
{$ifdef fpc}
  {$mode delphi}
{$endif}
 
{$apptype console}
 
uses
  Classes, blcksock, sockets, Synautil, SysUtils;
 
{@@
  Attends a connection. Reads the headers and gives an
  appropriate response
}
procedure AttendConnection(ASocket: TTCPBlockSocket);
var
  timeout: integer;
  s: string;
  method, uri, protocol: string;
  OutputDataString: string;
  ResultCode: integer;
begin
  timeout := 120000;
 
  WriteLn('Received headers+document from browser:');
 
  //read request line
  s := ASocket.RecvString(timeout);
  WriteLn(s);
  method := fetch(s, ' ');
  uri := fetch(s, ' ');
  protocol := fetch(s, ' ');
 
  //read request headers
  repeat
    s := ASocket.RecvString(Timeout);
    WriteLn(s);
  until s = '';
 
  // Now write the document to the output stream
 
  if uri = '/' then
  begin
    // Write the output document to the stream
    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;
 
    // Write the headers back to the client
    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: Servidor do Felipe usando Synapse' + CRLF);
    ASocket.SendString('' + CRLF);
 
  //  if ASocket.lasterror <> 0 then HandleError;
 
    // Write the document back to the browser
    ASocket.SendString(OutputDataString);
  end
  else
    ASocket.SendString('HTTP/1.0 504' + 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);
    end;
  until false;
 
  ListenerSocket.Free;
  ConnectionSocket.Free;
end.

Веб-сервисы (WebServices)

Согласно W3C "веб-сервис" - это программная система, разработанная для поддержки взаимодействия комппьютер-компьютер по сети. Он имеет интерфейс, описанный в машинном формате как, например, WSDL. Другие системы взаимодействуют веб-сервисом, способом, описанным их интерфейсом, используя сообщения, которые могут быть заключены в SOAP упаковку или претворять собой REST подход. Эти сообщения обычно передаются используя HTTP и являются содержимым XML в соединении с другим веб-стандартом. Программные приложения, написанные на разных языках программирования и запускаемые на разных платформах могут использовать веб-сервисы для обмена данными по компьютерным сетям, таким как интернет, методом, напоминающим меж-процессное(inter-process) взаимодействие внутри одного компьютера. Эта возможность компьютерного взаимодействия (например Windows и Linux приложений) обязана своим существованием использованию открытых стандартов. OASIS и W3C(wiki-ссылка) - это главные комитеты, отвечающие за архитектуру и стандартизацию веб-сервисов. Для того, чтобы улучшать возможности взаимодействия между реализациями веб-сервисов, организация WS-I создает серии описаний для дальнейшего определения участвующих стандартов.

Web Service Toolkit для FPC & Lazarus

Web Service Toolkit - это web services package для FPC и Lazarus.


XML Tutorial