Difference between revisions of "lNet/ru"

From Free Pascal wiki
Jump to navigationJump to search
Line 80: Line 80:
 
Визуальные компоненты (пакеты Lazarus) были протестированы в Win32, Win64, ARM/WinCE, Linux_x86_32, Linux_x86_64 и FreeBSD_x86_32. (gtk1 и gtk2 на unix платформах)
 
Визуальные компоненты (пакеты Lazarus) были протестированы в Win32, Win64, ARM/WinCE, Linux_x86_32, Linux_x86_64 и FreeBSD_x86_32. (gtk1 и gtk2 на unix платформах)
  
==History==
+
==История изменений==
  
 
* March 2011: A new version of lNet was just released. 0.6.5 completes SSL and IPv6 support including server-side and per-socket (for SSL) setting. SSL and IPv6 bugs were fixed as well as some remaining disconnect problems related to server bind errors and lingering sockets. DecodeURL bug introduced in 0.6.4 was also fixed.
 
* March 2011: A new version of lNet was just released. 0.6.5 completes SSL and IPv6 support including server-side and per-socket (for SSL) setting. SSL and IPv6 bugs were fixed as well as some remaining disconnect problems related to server bind errors and lingering sockets. DecodeURL bug introduced in 0.6.4 was also fixed.

Revision as of 17:45, 11 September 2023

English (en) русский (ru)

О компоненте

lNet или Lightweight Networking Library представляет собой набор классов и компонентов для включения управляемых событиями сетей TCP или UDP.

Авторы:

Лицензия: modified LGPL license (разрешает статическое связывание).

Загрузка

Существует два варианта библиотеки, которые больше полностью не синхронизируются:

  • lNet package. Упакованы в виде утилит для использования самого проекта FPC. Они не рекомендуются для общего использования.
  • https://lnet.wordpress.com/ (перемещен на GitHub).

Вы можете связаться с автором напрямую по электронной почте или перейти на канал #lnet на freenode.

Использование

Бросьте TLTCPComponent или TLUDPComponent на форму. Назначьте обработчики событий OnAccept, OnError, OnReceive, OnConnect и OnDisconnect. Обратите внимание, что это необязательно, но в большинстве случаев требуется для реализации функционала.

Клиентское соединение инициализируется вызовом Connect. Аргументами являются IP-адрес/имя хоста и порт соответственно. Используется неблокирующее соединение, это означает, что вы «НЕ» знаете, что вы подключены, пока случится событие OnConnect.

Соединение с сервером инициализируется вызовом Listen. Аргумент — порт.

Light bulb  Примечание: адрес — это строковое представление IP-адреса, например: '127.0.0.1' или имя хоста, например 'localhost'.

Отправка данных другой стороне осуществляется с помощью метода Send/SendMessage.

События TLNetComponent

  • OnError - это событие вызывается всякий раз, когда возникает ошибка соединения. Если обработчик не назначен, возникает исключение с "msg". Аргументы: msg — содержит строковое и числовое представление сообщения об ошибке, отформатированное в собственной кодировке или UTF8 (в зависимости от свойства ForceUTF8). aSocket — это сокет, в котором произошла ошибка, ноль означает, что ошибка не связана с конкретным сокетом.
  • OnConnect - это событие генерируется при успешном подключении клиента. aSocket — это сокет, к которому подключились. Он должен служить «отправной точкой» для клиентов.
  • OnAccept - это событие вызывается всякий раз, когда на сервере принимается соединение. Если обработчик не назначен, ничего не происходит. aSocket содержит сокет, который принял соединение.
  • OnDisconnect - это событие вызывается всякий раз, когда соединение разорвано. Если обработчик не назначен, ничего не происходит. aSocket содержит сокет, соединение с которым было разорвано.
  • OnReceive - это событие вызывается всякий раз, когда новые данные «готовы к приему». Если обработчик не назначен, ничего не происходит, но может произойти заполнение системного буфера, что, в свою очередь, вызовет событие OnError. aSocket — сокет, через который были получены данные. Данные считываются методом Get/GetMessage.
  • OnCanSend - это событие вызывается всякий раз, когда новые данные могут быть снова отправлены в сокет после сбоя вызова функции отправки и возврата 0. Его можно использовать для автоматизации отправки больших фрагментов. aSocket — это сокет, через который можно вызвать отправку.

Документация

Документация по lNet частично завершена. Вы также можете использовать диаграммы классов Jesus и модулей в качестве основного справочника.

Документация по протоколам eventer и TCP/UDP.: http://members.chello.sk/ales/docs (Archived version at archive.org}

Обзорные схемы можно найти здесь.: http://members.chello.sk/ales/docs/diagrams/overview.html
Pictures:
New class diagram
All classes
lNet units
lNet units 2

Зеркало документов и текущие заметки: http://z505.com/cgi-bin/powtils/docs/1.6/idx.cgi?file=lnetlufdoc


Прим.переводчика: большинство ссылок старые, потому - битые. На гитхабе есть демки и документация в виде xml-файла


Установка визуального пакета в Lazarus

  • запускаем Lazarus, перейдите в раздел «Компоненты/откройте файл пакета» (*.lpk).
  • открываем lnetvisual.lpk и устанавливаем
  • перезапускаем Лазарус

Если вы хотите использовать LNet в своем проекте, просто скопируйте куда-нибудь каталог lib и поместите его в путь поиска модулей компилятора с параметрами -Fu и -Fi для подкаталога lib/sys.

Содержимое пакета

Пакет состоит из базовой библиотеки модулей lNet, lTelnet для протокола telnet, lFTP для протокола ftp и библиотек lNetComponents для предоставления визуальных и невизуальных компонентов для работы в сети. Начиная с версии 0.4.0 были добавлены компоненты lHTTP и lSMTP. Начиная с версии 0.5.1 в библиотеке есть поддержка MIME, в основном для создания составных сообщений для SMTP. Начиная с версии 0.6.0 lNet поддерживает SSL по модульному принципу, а протокол SMTP был расширен до полной поддержки SSL/TLS (включая согласование STARTTLS во время выполнения). Клиентская часть HTTPS также поддерживается.

Тестирование

Невизуальные консольные компоненты были протестированы на Win32, Win64, Linux_x86_32, Linux_x86_64, Linux_PPC, Linux_PPC_64, Linux_ARM* (2.1.4+) и FreeBSD_x86_32. Визуальные компоненты (пакеты Lazarus) были протестированы в Win32, Win64, ARM/WinCE, Linux_x86_32, Linux_x86_64 и FreeBSD_x86_32. (gtk1 и gtk2 на unix платформах)

История изменений

  • March 2011: A new version of lNet was just released. 0.6.5 completes SSL and IPv6 support including server-side and per-socket (for SSL) setting. SSL and IPv6 bugs were fixed as well as some remaining disconnect problems related to server bind errors and lingering sockets. DecodeURL bug introduced in 0.6.4 was also fixed.
  • May 2010: A new version of lNet was just released. 0.6.4 adds Qt4 support inside Lazarus (lazarus latest trunk needed, 0.9.30 should be 1st stable with it). There were also numerous fixes (http URL parsing, FTP problems) and one major bug fixed (WinCE compilation with FPC 2.4.0+). Grab it at SVN, packages will be uploaded ASAP.
  • February 2010: Well there’s a skip in dates. Anyways version 0.6.3 of lNet has been released, you can find it in the downloads section. There’s been various bugfixes and file renames to avoid FPC conflicts. I didn’t find the time to do the QT4 port as I wanted but it’s in the works now. Some SSL fixes were made as well.
  • May 2008: Where to begin? This is a HUGE critical bugfix release. There was about 5 big bugs fixed in SSL section, one logical oversight in Session support. OpenSSL unit was added so WinCE compiles again and SMTP and FTP got bugs fixed in regards to possible desynchronization. I'd urge everyone who uses 0.6.x to update ASAP, but some bugs are also from 0.5.x (specifically the SMTP and FTP event deadlock problem).
  • May 2008: It seems that due to an oversight in what's packaged with FPC and for which platform, lNet 0.6.x doesn't currently compile on WinCE due to missing OpenSSL unit. The unit is in fpc 2.2.0, but is not compiled for that platform yet (it is in 2.2.1+). I will add the unit to lNet and release 0.6.2 shortly, but until then, WinCE users can work around this by copying this file into their lnetdir/lib directory. (same will be done in 0.6.2 so don't worry)
  • April 2008: 0.6.1 has been released today. This release fixes an ugly SSL logical bug in regards to the mandatory requirements of Certificate Authority List file and Keyfile proprties of SSLSession. They are no longer needed for normal SSL to work. A minor change in HTTP and handling of SSLSession are also present.

Stability

  • Base lNet TCP/UDP - stable
  • Telnet Client - stable*
  • FTP Client - stable*
  • SMTP Client - stable
  • HTTP Client - stable
  • HTTP Server - experimental
  • MIME streams - stable
  • SSL support (client-side) - stable
  • SSL support (server-side) - stable (0.6.5+)
  • IPv6 support - stable (0.6.5+)

* FTP и Telnet по-прежнему нуждаются в некоторых дополнительных функциях, таких как методы аутентификации.

В Linux, когда вы начинаете использовать LNet, GDB может случайно (при компиляции) аварийно завершить работу с различными типами сообщений. Установка для отладчика значения «Автоматически» в параметрах пакетов lnetbase и lnetvisual устраняет проблему.

Roadmap

Items that are struck through have been completed in the indicated version:

  • Stress testing [always]
  • Addition of Telnet and FTP clients (experimental level) [0.3] (done)
  • Cementing of TCP/UDP API [0.3] (done)
  • Addition of ICMP Ping/Traceroute protocol [na] (cancelled due to various reasons*)
  • Addition of SMTP, HTTP components [0.4] (done)
  • Stabilization of Telnet and FTP clients [0.5] (done)
  • Addition of MIME streams [0.5.1] (done)
  • Addition of Telnet and FTP servers (experimental level) [???]
  • Addition of SSL [0.6+] (done)
  • Addition of Carbon and/or Cocoa widget set support [0.7+]
  • Addition of Qt4 widget set support [0.6.4+] (done)
  • Cleanup of SSL/HTTP (so pure HTTP doesn't depend on TLSSLSocket) [0.6.x?]

* PING requires raw sockets which are only accessible to root on unix/linux platforms. It was decided that lNet won't support this, users who need PING should use the ping and ping6 programs via TProcess.

Requirements

LNet 0.6+:

  • Lazarus 0.9.24+ and FPC 2.2.0+
  • Status: Beta
  • Issues: Completely tested on Windows (WinXP), Linux (Ubuntu 7.10). FastCGI considered broken for now.

LNet 0.5:

  • Lazarus 0.9.22+ and FPC 2.0.4+
  • Status: Beta
  • Issues: Completely tested on Windows (WinXP), Linux (Ubuntu 6.10) and FreeBSD 5.5. FastCGI considered broken for now. WinCE requires Lazarus 0.9.23+ to compile!

LNet 0.4:

  • Lazarus 0.9.18+ and FPC 2.0.4+
  • Status: Beta
  • Issues: Completely tested on Windows (WinXP), Linux (Ubuntu 6.06LTS) and FreeBSD 6.1. HTTP server has issues under high load with fastcgi usage. FastCGI works only in Linux for now.

Специальное уведомление под Ubuntu

Некоторые «отсутствующие файлы» фактически находятся в подпапке «/net» и не обнаруживаются компилятором fpc. Просто скопируйте недостающие файлы из подпапки (lnet.pas, tomwinsock.pas, lfunc.inc...) '/usr/lib/lazarus/comComponents/lnetpackage/lnet' в '/usr/lib/lazarus/comComponents/lnetpackage'. ' (при необходимости измените пути). Затем завершите настройку, следуя процедуре установки. (от Steph12358)

API changes

0.1 to 0.2

  • There have been some API changes from 0.1 to 0.2. These were required and should improve the usability of packages. I know API changes are always a PITA but I'll try to keep them minimal from now on. Version 0.3 will be the first beta from which API will remain unchanged (only adding new stuff will be possible).
  • OnRecieve() changed to OnReceive()
  • Accept() changed to Listen()
  • All events' arguments changed. SocketNumber (int) got changed into aSocket(TLSocket) because of logical and speed reasons

0.2 to 0.3

  • Added OnCanSend and OnConnect. Connect is now non-blocking.
  • Removed buffersize and maxmsgs. Buffersize is no longer required because no internal buffer is used.

0.3 to 0.4

  • Lots of additions. Only "breakage" is that TLSocket.Port got changed into TLSocket.LocalPort and TLSocket.PeerPort for consistency reasons.

0.4 to 0.5

  • We did some API cleanup which resulted in API breakage.
  • All "connection" classes now descend from TLComponent
  • TLSocket now has a .Creator which is a TLComponent property specifying the creator (eg: TLTcp), so you can see now which socket in an event belongs to which connection.
  • Added "Connect()" and "Listen()" parameterless calls to all connections. This is mostly to enable Lazarus visual style, so people can use .Host and .Port properties and repeatedly just call ".Connect()" for example.
  • Added "StatusSet" set to SMTP and FTP components. This enables you to monitor specific FTP or SMTP actions and their results with events OnSuccess and OnFailure. You set the events to be watched in the set, and get results in one of the callbacks.
  • Changed ALL callbacks which didn't use TLSocket as sender to use it. This means all FTP, SMTP and HTTP events which had "Sender: TL<HigherType>" were reverted to basic Socket style callbacks!

0.5.4- to 0.5.5+

  • Some minor API changes were made which shouldn't break anything but I list them to be on the safe side.
  • .Timeout property on eventers and connections was set to Integer (from DWord) to support -1 as "block until an event happens"

0.5 to 0.6

  • No changes in public API, only additions.

Note for 0.4.0: In version 0.4.0, I forgot to move lHTTPSettings unit from lib to the http example. It was NOT supposed to be a part of the library, just the example. DON'T use this, it's not a "library", it's a part of the example (http server will get it's own project later)

lNet для FreeBSD, Linux, macOS и Windows

  • lNet для FreeBSD, Linux, macOS и Windows от trevoz
    • Множество изменений: теперь библиотека будет компилироваться с помощью FPC 3.2.2 или FPC 3.3.1.
    • Добавлен TLSv1.3.
    • Linux TLS не работает из-за проблемы с e-poll в файле lib/sys/lepolleventer.inc.
    • Примеры консоли компилируются (я протестировал пример SMTP, который мне и нужен).
    • Примеры визуальных компонентов не компилируются для macOS — в них нет привязок интерфейса Cocoa или даже несуществующего Carbon.

См.также