お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"WWWサーバを作る"



最近ネットワークがらみの話題が多いが,スタンドアロンのアプリケーションしか手がけていなかったプログラマにありがちな,ネットワーク,インターネットテクノロジーに対する「心理的な壁」を取り除こうというコンポーネント.簡単なサーバの自作をしてみれば,キーテクノロジーはすでに手の内にあるということに気が付くのではないか.
 実際の運用で使うのは,IIS や apache だとしてもである.

使い方:
1. コンポをフォームに貼り付けて,TCP/IP をインストールしてあるマシンで起動する.2. そのマシンでブラウザを起動して URL にhttp://127.0.0.1と入れてリターンすると

This is a test data by THttpTest.

と表示されるはず.起動したマシンと別のマシンから読むには,サーバのIPアドレスを入れる.サーバのIPアドレスは DOS窓でipconfig と打つと分かる.
ルータ等を適切に設定すれば,インターネットを通して読むことももちろんできる.


------------------------------------------------------------------------------
unit HttpTest;
interface
uses
  Windows, Messages, SysUtils, Classes, Psock, NMConst, ActiveX;
type
  THttpTest = class(TNMGeneralServer)
  public
    constructor Create(AOwner: TComponent); override;
    procedure Serve; override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents( 'Internet', [ THttpTest ]);
end;

{ THttpTest }
function MakeGMT: string;
var
  DT: TDateTime;
  ST: SYSTEMTIME;
const
  DayOfWeekNames: array[0..6] of string =
             ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
  MonthNames: array[1..12] of string =
    ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
begin
  GetSystemTime( ST );
  DT := SystemTimeToDateTime(ST);
  // ex. 'Mon, 07 Feb 2000 13:54:16 GMT'
  Result := DayOfWeekNames[ST.wDayOfWeek] + ', '
            + FormatDateTime('dd ', DT)
            + MonthNames[ST.wMonth] + ' '
            + FormatDateTime('yyyy hh:nn:ss ',DT)
            + 'GMT';
end;

const CRLF = #$0d#$0a;

constructor THttpTest.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Port := 80;
end;

procedure THttpTest.Serve;
var
  Header, Body: string;
begin
  // 来たデータは全部無視
  // Header
  Header := 'HTTP/1.0 200 OK' + CRLF
         + 'Server: THttpTest/1.0'+ CRLF
         + 'Date: ' + MakeGMT + CRLF
         + 'Content-Type: text/plain' + CRLF
         + 'Connection: close' + CRLF
         + CRLF;
  write( Header );
  // Body :要するにこの部分に何かを入れて返すというのがサーバの仕事
  Body := 'This is a test data by THttpTest.';
  write( Body );
  Application.ProcessMessages;
  disconnect;
end;

                                                  TN(CQJ01721)
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 00/12/31 -

Original document by TN            氏 ID:(CQJ01721)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum