なでしこ > Delphi > 戻る

スレッドを使う方法

 今度はスレッドを使って通信する方法です。
■スレッドで単純に

スレッドで単純に

 前回の非同期通信では、ウィンドウメッセージを使ってデータの受け渡しを行いました。しかしこの方法では、メールの受信処理をするプログラムなどを作る場合、サーバーとのデータのやり取りが複雑になりがちです。

 そこで、スレッドを使うことで、サーバーとの通信処理を単純に記述できるようにします。

 例えば、メールの受信を例に取ると、メールの受信は以下のように行われます。

サーバーからクライアントは、→
クライアントからサーバーは、←

(接続)
→+OK POP3 xxx
(ユーザとパスワードを入力)
←USER test
→+OK Password required for test
←PASS abc123456
→+OK test has 2 message
(メールの一覧を取得)
←LIST
→+OK 2 1116
1 558
2 1524
.
(1番目のメールを取得)
←RETR 1
→+OK 1 558
From test@xxx.xx.jp
Subject test

test
.

これを、前回作ったようなTCPユニットを使って書くと以下のようになります。

var
  tcp: TKTcpClient;
  s: string;
begin
  tcp := TKTcpClient.Create(nil);
  try
    tcp.Host := 'localhost'// テスト用メールサーバーへの接続
    tcp.Port := 110;
    tcp.Open;
    Writeln( tcp.recvln );     //受信結果> +OK POP3 xxx
    tcp.sendln('USER test');
    Writeln( tcp.recvln );     //受信結果> +OK Password required for test
    tcp.sendln('PASS test');
    Writeln( tcp.recvln );     //受信結果> +OK test has 2 message
    tcp.sendln('LIST');
    Writeln( tcp.RecvLn );     //受信結果> +OK 2 1116
    Writeln( tcp.RecvLnToDot );//          ...リスト...
    tcp.sendln('RETR 1');
    Writeln( tcp.RecvLn )      //受信結果> +OK 1 xxx
    Writeln( tcp.RecvLnToDot );//          ...メール本文...
    tcp.Close;
  finally
    tcp.Free;
  end;
  readln;
end.

これをスレッドの中に組み込めば、意外とあっさりしたプログラムでメール受信などができるようになると思います。



→トップへ →目次へ