Networking/ja

From Lazarus wiki
Revision as of 04:11, 7 September 2010 by TheCreativeCAT (talk | contribs) (→‎Webserver example: slight change)
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)


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

このページは、Lazarusでのネットワークプログラムについてのチュートリアルを開始するページになるでしょう。この記事に、リンクやセクション、ページ、あなたのWikiへのリンクを追加していってください。このページには、一般的な情報があります。

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

その他のネットワークのチュートリアル

TCP/IP Protocol

Webserver example

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

<delphi> {

 マイクロ 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>

Teste

</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. </delphi>

Webサービス

W3CによるWEBサービスはネットワークの上のマシンから、別のマシンへ、共通的に利用できるように設計されたソフトウェア・システムの名称です。 WEBサービスには、WSDLなど、「機械が処理可能」な形式で記述されているインタフェースがあります。 また、他のシステムは、多くの場合、インタフェースによってSOAPに内包されるメッセージを使用し定められた方法でウェブサービスと対話します。もしくは、RESTによる方法を取るかもしれません。 これらのメッセージは、通常HTTPを使用して伝達され、ウェブ関連の他の規格に関連するXMLから成りたっています。

様々なプログラミング言語で書かれ、様々なプラットホームで動くソフトウェアアプリケーションは、データをおたがいに一つのコンピュータでコミュニケーションを処理します。それと同様の方法を使って、インターネットのようなコンピュータネットワークの上でもコミュニケーションを行うために、WEBサービスを利用することができます。

この相互運用性(例えば、WindowsとLinuxアプリケーションの間など)はオープンスタンダードの運用によるものです。 OASISとW3Cはウェブサービスのアーキテクチャと標準化の策定に責任や権限がある主な委員会です。

ウェブサービス実装間の相互運用性を改良するため、WS-I委員会は、さらに定義する一連のプロフィールを規格の関連の開発をしています。

FPC & Lazarus のWeb Service Toolkit

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

External Links

XML