Difference between revisions of "Networking/ja"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; removed categories included in template)
 
(23 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
{{Networking}}
 
{{Networking}}
 
  
 
{{Japanese Menu}}
 
{{Japanese Menu}}
  
このページは、Lazarusでのネットワークプログラムについてのチュートリアルを開始するページになるでしょう。
+
このページは、Lazarus と 平易な FPC を用いたネットワークプログラムについての情報とチュートリアル/コードのページです。
この記事に、リンクやセクション、ページ、あなたのWikiへのリンクを追加していってください。(訳注:最初にこの元記事を書いた人はネットワークプログラミングの専門でなく、独学で勉強したことを書いているそうです。)
 
  
このページには、一般的な情報があります。
+
(訳注:最初にこの元記事を書いた人はネットワークプログラミングの専門でなく、独学で勉強したことを書いているそうです)
  
__TOC__
+
== TCP/IP プロトコル ==
== その他のネットワークのチュートリアル ==
 
  
* [[:fpc:Secure programming | セキュア・プログラミング]]  
+
{{Note|FPC/Lazarus には、ネットワーキングの機能を使うための様々なライブラリ(Synapse, lnet, fphttpclient, Indy,...)があるため、それらのライブラリに対して多くのサンプルコードが記述できるでしょう。 したがって、異なるライブラリに対しても同じサンプルコードを何度もみることになるかもしれません。 複数のネットワークライブラリの使用が可能なフレームワークの作り方の例について、 [http://brookframework.org] や [https://bitbucket.org/reiniero/fpctwit] フレームワークもご参照ください}}
  
* [[Sockets]] - TCP/IP ソケットコンポーネント
+
=== CGI/FastCGI - REST, CRUD, チャットやブログ、ウェブページなど ===
  
* [[lNet]] - 軽量ネットワークコンポーネント
+
これらの機能は [[fcl-web]] を使うことで可能となります。 また、 Brook フレームワーク( [http://silvioprog.github.io/brookframework this page] )でも実装されています。
  
== TCP/IP Protocol ==
+
=== SSH/Telnet クライアント、メールの送信、ファイルのダウンロードや OAuth v1.0 の例 ===
 +
[[Synapse]]のページをご覧ください。
  
== XML ==
+
=== Webサーバの例 ===
  
The Extensible Markup Language is a [http://www.w3.org/ W3C] recommended language created to interchange information between different systems. It is a text based way to store information. Modern data interchange languages such as XHTML, as well as most WebServices technologies, are based on XML.
+
以下は Synapse ライブラリを用いて記述した http サーバの例です。Mac OS Xでテストしました。ただし、Mac OS Xの socket ユニットでは定数 MSG_NOSIGNAL が定義されていないため、Synapse のソースに定数定義 MSG_NOSIGNAL = $20000 を追加してコンパイルしました(訳注 : 2010年9月現在SVNで流れている Synapse の新バージョンでは、上記の定数が追加されており、無修正でコンパイルできます)。
  
Currently there is a set of units that provides support for XML on Lazarus. These units are called "XMLRead", "XMLWrite" and "DOM" and they are part of the Free Component Library (FCL) from the Free Pascal Compiler. The FCL is already on the default search path for the compiler on Lazarus, so you only need to add the units to your uses clause in order to get XML support. The FCL is not documented currently (October / 2005), so this short tutorial aims at introducing XML access using those units.
+
<syntaxhighlight lang=pascal>
 +
{
 +
  マイクロ Pascal ウェブサーバ
 +
 +
  Synapseライブラリを用いた極単純なウェブサーバの実装例である。
 +
 +
  ブロッキングモードのソケットを用いた単一スレッドアプリケーションであるため
 +
  複数のリクエストを並行して処理することはできない。
  
The XML DOM (Document Object Model) is a set of standarized objects that provide a similar interface for the use of XML on different languages and systems. The standard only specifies the methods, properties and other interface parts of the object, leaving the implementation free for different languages. The FCL currently supports fully the [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].
+
  ブラウザから受け取ったヘッダは標準出力に出力される。
  
=== Basic Example ===
+
  サービス可能なウェブページのURIは固定で、'/' のみである。
 +
  ほかのURIに対しては '504 not found' を返す。
 +
}
 +
program upserver;
  
Let´s say you want to access a XML file called 'C:\Programas\teste.xml'. Here is the file content:
+
{$ifdef fpc}
 +
  {$mode delphi}
 +
{$endif}
  
<code>
+
{$apptype console}
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<images directory="mydir">
 
  <imageNode URL="graphic.jpg" title="">
 
    <Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca>
 
    <Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca>
 
  </imageNode>
 
</images>
 
</code>
 
  
The following code can write the Node´s names to a TMemo placed on a form:
+
uses
 +
  Classes, blcksock, sockets, Synautil, SysUtils;
  
<code>
+
{@@
var
+
  コネクションに参加する。ヘッダを読み、しかるべき返信を行う
  Documento: TXMLDocument;
+
}
   i, j: Integer;
+
procedure AttendConnection(ASocket: TTCPBlockSocket);
begin
+
var
   Documento := TXMLDocument.Create;
+
   timeout: integer;
   ReadXMLFile(Documento, 'C:\Programas\teste.xml');
+
   s: string;
   Memo.Lines.Clear;
+
   method, uri, protocol: string;
   with Documento.DocumentElement.ChildNodes do
+
   OutputDataString: string;
  begin
+
   ResultCode: integer;
    for i := 0 to (Count - 1) do
+
begin
    begin
+
  timeout := 120000;
      Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);
 
      for j := 0 to (Item[i].ChildNodes.Count - 1) do
 
      begin
 
        Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '
 
        + Item[i].ChildNodes.Item[j].NodeValue);
 
      end;
 
    end;
 
  end;
 
  Documento.Free;
 
end;
 
</code>
 
  
=== Populating a TreeView with XML ===
+
  WriteLn('Received headers+document from browser:');
  
One common use of XML files is to parse them and show their contents in a tree like format. You can find the TTreeView component on the "Common Controls" tab on Lazarus.
+
  //リクエストラインを読み込む
 +
  s := ASocket.RecvString(timeout);
 +
  WriteLn(s);
 +
  method := fetch(s, ' ');
 +
  uri := fetch(s, ' ');
 +
  protocol := fetch(s, ' ');
  
The function below will take a XML document previously loaded from a file or generated on code, and will populate a TreeView with it´s contents. The caption of each node will be the content of the first attribute of each node.
+
  //リクエストヘッダを読み込む
 +
  repeat
 +
    s := ASocket.RecvString(Timeout);
 +
    WriteLn(s);
 +
  until s = '';
  
<pre>
+
   // ここで出力ストリームに文書を書き込む
procedure TForm1.XML2Tree(tree: TTreeView; XMLDoc: TXMLDocument);
 
var
 
   iNode: TDOMNode;
 
  
   procedure ProcessNode(Node: TDOMNode; TreeNode: TTreeNode);
+
   if uri = '/' then
  var
 
    cNode: TDOMNode;
 
 
   begin
 
   begin
     if Node = nil then Exit; // Stops if reached a leaf
+
     // 出力する文書をストリームに書く
      
+
    OutputDataString :=
     // Adds a node to the tree
+
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
     TreeNode := tree.Items.AddChild(TreeNode, Node.Attributes[0].NodeValue);
+
      + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF
 +
      + '<html><h1>Teste</h1></html>' + CRLF;
 +
 
 +
    // ヘッダをクライアントに返信する
 +
     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);
  
    // Goes to the child node
+
  // if ASocket.lasterror <> 0 then HandleError;
    cNode := Node.ChildNodes.Item[0];
 
  
     // Processes all child nodes
+
     //文書をブラウザに送信する
     while cNode <> nil do
+
     ASocket.SendString(OutputDataString);
    begin
+
  end
      ProcessNoDe(cNode, TreeNode);
+
   else
      cNode := cNode.NextSibling;
+
     ASocket.SendString('HTTP/1.0 504' + CRLF);
    end;
 
   end;
 
      
 
begin
 
  iNode := XMLDoc.DocumentElement.ChildNodes.Item[0];
 
  while iNode <> nil do
 
  begin
 
    ProcessNode(iNode, nil); // Recursive
 
    iNode := iNode.NextSibling;
 
  end;
 
 
end;
 
end;
</pre>
 
  
=== Modifying a XML document ===
+
var
 +
  ListenerSocket, ConnectionSocket: TTCPBlockSocket;
 +
begin
 +
  ListenerSocket := TTCPBlockSocket.Create;
 +
  ConnectionSocket := TTCPBlockSocket.Create;
  
The first thing to remember is that TDOMDocument is the "handle" to the DOM. You can get an instance of this class by creating one or by loading a XML document.
+
  ListenerSocket.CreateSocket;
 +
  ListenerSocket.setLinger(true,10);
 +
  ListenerSocket.bind('0.0.0.0','1500');
 +
  ListenerSocket.listen;
  
Nodes on the other hand cannot be created like a normal object. You *must* use the methods provided by TDOMDocument to create them, and latter use other methods to put them on the correct place on the tree. This is because nodes must be "owned" by a specific document on DOM.
+
  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;
  
Below are some common methods from TDOMDocument:
+
  ListenerSocket.Free;
 +
  ConnectionSocket.Free;
 +
end.
 +
</syntaxhighlight>
  
<pre>
 
  function CreateElement(const tagName: DOMString): TDOMElement; virtual;
 
  function CreateTextNode(const data: DOMString): TDOMText;
 
  function CreateCDATASection(const data: DOMString): TDOMCDATASection;
 
    virtual;
 
  function CreateAttribute(const name: DOMString): TDOMAttr; virtual;
 
</pre>
 
  
And here an example method that will located the selected item on a TTreeView and then insert a child node to the XML document it represents. The TreeView must be previously filled with the contents of a XML file using the [[Networking#Populating a TreeView with XML|XML2Tree function]].
+
=== FPC に備え付けの fcl-net コンポーネントを用いた TCP/IP クライアント-サーバ の例 ===
  
<pre>
+
[http://pascalgeek.blogspot.com/2012/06/encryption-decryption-and-asynchronous.html ブログ記事における例]をご覧ください。
procedure TForm1.actAddChildNode(Sender: TObject);
 
var
 
  Posicao: Integer;
 
  NovoNo: TDomNode;
 
begin
 
  {*******************************************************************
 
  *  Detects the selected element
 
  *******************************************************************}
 
  if TreeView1.Selected = nil then Exit;
 
  
  if TreeView1.Selected.Level = 0 then
+
=== HTTP ページのダウンロードや POST を用いたウェブサーバへのアップロード、external IP アドレスの取得 ===
  begin
 
    Posicao := TreeView1.Selected.Index;
 
  
    NovoNo := XMLDoc.CreateElement('item');
+
これらの例は、 [[fphttpclient#Examples]] で見つかります(FPC/Lazarus に備え付けの fphttpclient コンポーネントを使用した例です)
    TDOMElement(NovoNo).SetAttribute('nome', 'Item');
 
    TDOMElement(NovoNo).SetAttribute('arquivo', 'Arquivo');
 
    XMLDoc.DocumentElement.ChildNodes.Item[Posicao].AppendChild(NovoNo);
 
  
    {*******************************************************************
+
== Webサービス ==
    *  Updates the TreeView
 
    *******************************************************************}
 
    TreeView1.Items.Clear;
 
    XML2Tree(TreeView1, XMLDoc);
 
  end
 
  else if TreeView1.Selected.Level >= 1 then
 
  begin
 
    {*******************************************************************
 
    *  This function only works on the first level of the tree,
 
    *  but can easely modifyed to work for any number of levels
 
    *******************************************************************}
 
  end;
 
end;
 
</pre>
 
  
== WebServices ==
+
[http://www.w3.org/ W3C] によると、 Web サービスとは ネットワーク越しに機械と機械を相互に利用できるように設計されたソフトウェアの名称です。
  
According to the [http://www.w3.org/ W3C] a Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface that is described in a machine-processable format such as WSDL. Other systems interact with the Web service in a manner prescribed by its interface using messages, which may be enclosed in a SOAP envelope, or follow a REST approach. These messages are typically conveyed using HTTP, and are normally comprised of XML in conjunction with other Web-related standards. Software applications written in various programming languages and running on various platforms can use web services to exchange data over computer networks like the Internet in a manner similar to inter-process communication on a single computer. This interoperability (e.g., between Windows and Linux applications) is due to the use of open standards. OASIS and the W3C are the primary committees responsible for the architecture and standardization of web services. To improve interoperability between web service implementations, the WS-I organisation has been developing a series of profiles to further define the standards involved.
+
Web サービスは、 WSDL などのように 「機械が処理可能」 な形式で記述されているインタフェースを持ちます。 そのほかのシステムは、SOAP エンベロープに含まれるメッセージを使用したインタフェースによって定められた方法で、ウェブサービスと対話します。もしくは、RESTの原則に従うかもしれません。
 +
これらのメッセージは、一般的に HTTP を使用して伝達され、普通は他のウェブに関する規格と共同した XML から構成されています。
  
=== Web Service Toolkit for FPC & Lazarus ===
+
様々なプログラミング言語で書かれ、様々なプラットホームで動くソフトウェアアプリケーションであっても、 Web サービスを利用することで、一つのコンピュータにおける内部処理と同様な方法でインターネットのようなコンピュータネットワーク越しでも、データの交換が可能になります。
[[Web Service Toolkit]] is a web services package for FPC and Lazarus.
 
  
== External Links ==
+
この相互運用性 (例えば、WindowsとLinuxアプリケーションの間など) はオープンな規格によってもたらされました。 OASIS と W3C は Web サービスのアーキテクチャと標準化に関して信頼できる主要な委員会です。
 +
また、 Web サービス実装間の相互運用性を改良するため、 WS-I 組織は、さらなる関連する標準を定義するために、一連のプロファイルを開発しています。
  
'''XML'''
+
=== FPC & Lazarus のための Web サービスツールキット ===
 +
[[Web Service Toolkit]] は FPC と Lazarus のための WEBサービス のパッケージです。
  
* [http://www.w3schools.com/xml/default.asp W3Schools] Xml Tutorial
+
== 以下もご参照ください ==
 +
* [[Portal:Web Development|Web Development Portal]]
 +
* [[Networking libraries|ネットワーキングライブラリ]] - 各種ネットワーキングライブラリの比較
 +
* [http://brookframework.org Brook Framework] - 完全な Free Pascal による Web アプリケーションのためのフレームワークです。 純粋な Pascal からできており、Pascal ではない言語に悩まされる必要はありません。
 +
* [http://www.fastplaz.com FastPlaz] - Pascal のための Fast Web フレームワークです。 特徴として、theme/templating や simple Model、 セッション、メーラー などなど。
 +
* [[Sockets]] - TCP/IP ソケットコンポーネント
 +
* [[fcl-net]] - FPC に備え付けのネットワーキングライブラリ
 +
* [[Indy_with_Lazarus/ja]] - 多くの機能を持つネットワーキングライブラリのインストール方法
 +
* [[lNet]] - 軽量ネットワークコンポーネント
 +
* [[Synapse]] - シリアルポートとSerial port and synchronous TCP/IP ライブラリ
 +
* [[XML Tutorial/ja]] - XML はしばしばネットワーク通信で用いられます
 +
* [[FPC and Apache Modules]]
 +
* [[fcl-web]] - fpWeb という名前でも知られており、 cgi や fastcgi、apache のモジュールからなる Web アプリケーションを作るためのライブラリです。
 +
* [[Secure programming | セキュア・プログラミング]]
 +
* [[Internet Tools]] - Synapse/wininet/Android's httpcomponents simplifying https and redirections や ダウンロードされたページを処理するための XPath/XQuery/CSS セレクタ/JSON のエンジン などのラッパー

Latest revision as of 09:08, 21 February 2020

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

日本語版メニュー
メインページ - Lazarus Documentation日本語版 - 翻訳ノート - 日本語障害情報

このページは、Lazarus と 平易な FPC を用いたネットワークプログラムについての情報とチュートリアル/コードのページです。

(訳注:最初にこの元記事を書いた人はネットワークプログラミングの専門でなく、独学で勉強したことを書いているそうです)

TCP/IP プロトコル

Light bulb  Note: FPC/Lazarus には、ネットワーキングの機能を使うための様々なライブラリ(Synapse, lnet, fphttpclient, Indy,...)があるため、それらのライブラリに対して多くのサンプルコードが記述できるでしょう。 したがって、異なるライブラリに対しても同じサンプルコードを何度もみることになるかもしれません。 複数のネットワークライブラリの使用が可能なフレームワークの作り方の例について、 [1][2] フレームワークもご参照ください

CGI/FastCGI - REST, CRUD, チャットやブログ、ウェブページなど

これらの機能は fcl-web を使うことで可能となります。 また、 Brook フレームワーク( this page )でも実装されています。

SSH/Telnet クライアント、メールの送信、ファイルのダウンロードや OAuth v1.0 の例

Synapseのページをご覧ください。

Webサーバの例

以下は Synapse ライブラリを用いて記述した http サーバの例です。Mac OS Xでテストしました。ただし、Mac OS Xの socket ユニットでは定数 MSG_NOSIGNAL が定義されていないため、Synapse のソースに定数定義 MSG_NOSIGNAL = $20000 を追加してコンパイルしました(訳注 : 2010年9月現在SVNで流れている Synapse の新バージョンでは、上記の定数が追加されており、無修正でコンパイルできます)。

{
  マイクロ Pascal ウェブサーバ
 
  Synapseライブラリを用いた極単純なウェブサーバの実装例である。
 
  ブロッキングモードのソケットを用いた単一スレッドアプリケーションであるため
  複数のリクエストを並行して処理することはできない。

  ブラウザから受け取ったヘッダは標準出力に出力される。

  サービス可能なウェブページのURIは固定で、'/' のみである。
  ほかのURIに対しては '504 not found' を返す。
}
program upserver;

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

{$apptype console}

uses
  Classes, blcksock, sockets, Synautil, SysUtils;

{@@
  コネクションに参加する。ヘッダを読み、しかるべき返信を行う
}
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:');

  //リクエストラインを読み込む
  s := ASocket.RecvString(timeout);
  WriteLn(s);
  method := fetch(s, ' ');
  uri := fetch(s, ' ');
  protocol := fetch(s, ' ');

  //リクエストヘッダを読み込む
  repeat
    s := ASocket.RecvString(Timeout);
    WriteLn(s);
  until s = '';

  // ここで出力ストリームに文書を書き込む

  if uri = '/' then
  begin
    // 出力する文書をストリームに書く
    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;

    // ヘッダをクライアントに返信する
    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;

    //文書をブラウザに送信する
    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.


FPC に備え付けの fcl-net コンポーネントを用いた TCP/IP クライアント-サーバ の例

ブログ記事における例をご覧ください。

HTTP ページのダウンロードや POST を用いたウェブサーバへのアップロード、external IP アドレスの取得

これらの例は、 fphttpclient#Examples で見つかります(FPC/Lazarus に備え付けの fphttpclient コンポーネントを使用した例です)。

Webサービス

W3C によると、 Web サービスとは ネットワーク越しに機械と機械を相互に利用できるように設計されたソフトウェアの名称です。

Web サービスは、 WSDL などのように 「機械が処理可能」 な形式で記述されているインタフェースを持ちます。 そのほかのシステムは、SOAP エンベロープに含まれるメッセージを使用したインタフェースによって定められた方法で、ウェブサービスと対話します。もしくは、RESTの原則に従うかもしれません。 これらのメッセージは、一般的に HTTP を使用して伝達され、普通は他のウェブに関する規格と共同した XML から構成されています。

様々なプログラミング言語で書かれ、様々なプラットホームで動くソフトウェアアプリケーションであっても、 Web サービスを利用することで、一つのコンピュータにおける内部処理と同様な方法でインターネットのようなコンピュータネットワーク越しでも、データの交換が可能になります。

この相互運用性 (例えば、WindowsとLinuxアプリケーションの間など) はオープンな規格によってもたらされました。 OASIS と W3C は Web サービスのアーキテクチャと標準化に関して信頼できる主要な委員会です。 また、 Web サービス実装間の相互運用性を改良するため、 WS-I 組織は、さらなる関連する標準を定義するために、一連のプロファイルを開発しています。

FPC & Lazarus のための Web サービスツールキット

Web Service Toolkit は FPC と Lazarus のための WEBサービス のパッケージです。

以下もご参照ください

  • Web Development Portal
  • ネットワーキングライブラリ - 各種ネットワーキングライブラリの比較
  • Brook Framework - 完全な Free Pascal による Web アプリケーションのためのフレームワークです。 純粋な Pascal からできており、Pascal ではない言語に悩まされる必要はありません。
  • FastPlaz - Pascal のための Fast Web フレームワークです。 特徴として、theme/templating や simple Model、 セッション、メーラー などなど。
  • Sockets - TCP/IP ソケットコンポーネント
  • fcl-net - FPC に備え付けのネットワーキングライブラリ
  • Indy_with_Lazarus/ja - 多くの機能を持つネットワーキングライブラリのインストール方法
  • lNet - 軽量ネットワークコンポーネント
  • Synapse - シリアルポートとSerial port and synchronous TCP/IP ライブラリ
  • XML Tutorial/ja - XML はしばしばネットワーク通信で用いられます
  • FPC and Apache Modules
  • fcl-web - fpWeb という名前でも知られており、 cgi や fastcgi、apache のモジュールからなる Web アプリケーションを作るためのライブラリです。
  • セキュア・プログラミング
  • Internet Tools - Synapse/wininet/Android's httpcomponents simplifying https and redirections や ダウンロードされたページを処理するための XPath/XQuery/CSS セレクタ/JSON のエンジン などのラッパー