Difference between revisions of "Networking/ja"

From Free Pascal wiki
Jump to navigationJump to search
m (→‎Webserver example: translation added)
Line 21: Line 21:
 
=== Webserver example ===
 
=== Webserver example ===
  
Bellow there is an example http server written with Synapse and tested in Mac OS X, after changing the synapse source to use a fixed constant $20000 as MSG_NOSIGNAL, because this constant isn't present in the sockets unit in Mac OS X.
+
以下は Synapse ライブラリを用いて記述した http サーバの例です。Mac OS Xでテストしました。ただし、Mac OS Xの socket ユニットでは定数 MSG_NOSIGNAL が定義されていないため、Synapse のソースに定数定義 MSG_NOSIGNAL = $20000 を追加してコンパイルしました(訳注 : 2010年9月現在SVNで流れている Synapse の新バージョンでは、上記の定数が追加されており、無修正でコンパイルできます)。
  
 
<delphi>
 
<delphi>
 
{
 
{
   The Micro Pascal WebServer
+
   マイクロ Pascal ウェブサーバ
 +
 +
  Synapseライブラリを用いた極単純なウェブサーバの実装例である。
 +
 +
  ブロッキングソケットを用いた単一スレッドアプリケーションであるため
 +
  複数のリクエストを並行して処理することはできない。
  
   This is a very simple example webserver implemented with the Synapse library.
+
   ブラウザから受け取ったヘッダは標準出力に出力される。
  
   It works with blocking sockets and a single thread, so it
+
   サービス可能なウェブページのURIは固定で、'/' のみである。
  can only handle one request at a given time.
+
   ほかのURIに対しては '504 not found' を返す。
 
 
  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;
 
program upserver;
Line 50: Line 49:
  
 
{@@
 
{@@
   Attends a connection. Reads the headers and gives an
+
   コネクションに参加する。ヘッダを読み、しかるべき返信を行う
  appropriate response
 
 
}
 
}
 
procedure AttendConnection(ASocket: TTCPBlockSocket);
 
procedure AttendConnection(ASocket: TTCPBlockSocket);
Line 65: Line 63:
 
   WriteLn('Received headers+document from browser:');
 
   WriteLn('Received headers+document from browser:');
  
   //read request line
+
   //リクエストラインを読み込む
 
   s := ASocket.RecvString(timeout);
 
   s := ASocket.RecvString(timeout);
 
   WriteLn(s);
 
   WriteLn(s);
Line 72: Line 70:
 
   protocol := fetch(s, ' ');
 
   protocol := fetch(s, ' ');
  
   //read request headers
+
   //リクエストヘッダを読み込む
 
   repeat
 
   repeat
 
     s := ASocket.RecvString(Timeout);
 
     s := ASocket.RecvString(Timeout);
Line 78: Line 76:
 
   until s = '';
 
   until s = '';
  
   // Now write the document to the output stream
+
   // ここで出力ストリームに文書を書き込む
  
 
   if uri = '/' then
 
   if uri = '/' then
 
   begin
 
   begin
     // Write the output document to the stream
+
     // 出力する文書をストリームに書く
 
     OutputDataString :=
 
     OutputDataString :=
 
       '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
 
       '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
Line 88: Line 86:
 
       + '<html><h1>Teste</h1></html>' + CRLF;
 
       + '<html><h1>Teste</h1></html>' + CRLF;
  
     // Write the headers back to the client
+
     // ヘッダをクライアントに返信する
 
     ASocket.SendString('HTTP/1.0 200' + CRLF);
 
     ASocket.SendString('HTTP/1.0 200' + CRLF);
 
     ASocket.SendString('Content-type: Text/Html' + CRLF);
 
     ASocket.SendString('Content-type: Text/Html' + CRLF);
Line 99: Line 97:
 
   //  if ASocket.lasterror <> 0 then HandleError;
 
   //  if ASocket.lasterror <> 0 then HandleError;
  
     // Write the document back to the browser
+
     //文書をブラウザに送信する
 
     ASocket.SendString(OutputDataString);
 
     ASocket.SendString(OutputDataString);
 
   end
 
   end

Revision as of 02:02, 7 September 2010

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