中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 通讯/网络
TCP/IP(八)
作者:mysine 时间:2001-10-30 10:38 出处:互联网 责编:chinaitpower
              摘要:TCP/IP(八)

(*@\\\0000000601*)
(*@/// procedure t_nntp.GetArticleNr(index:integer);                     // ARTICLE *)
procedure t_nntp.GetArticleNr(index:integer);
begin
  if not f_logged_in then login;
  self.SendCommand('ARTICLE '+inttostr(index));
  self.response;
  f_news.clear;
  GetArticleInternally;
  end;
(*@\\\0000000401*)
(*@/// procedure t_nntp.SetCurrentArticle(index:integer);                // STAT *)
procedure t_nntp.SetCurrentArticle(index:integer);
begin
  if not f_logged_in then login;
  self.SendCommand('STAT '+inttostr(index));
  self.response;
  end;
(*@\\\0000000401*)
(*@/// procedure t_nntp.GetCurrentArticle;                               // HEAD and BODY *)
procedure t_nntp.GetCurrentArticle;
begin
  if not f_logged_in then login;
  f_news.clear;
  self.SendCommand('HEAD');
  GetArticleInternally;
  f_news.add(');
  self.SendCommand('BODY');
  GetArticleInternally;
  end;
(*@\\\0000000401*)
(*@/// procedure t_nntp.GetNextArticle;                                  // NEXT *)
procedure t_nntp.GetNextArticle;
begin
  if not f_logged_in then login;
  self.SendCommand('NEXT');
  self.response;
  GetCurrentArticle;
  end;
(*@\\\0000000401*)
(*@/// procedure t_nntp.GetPreviousArticle;                              // LAST *)
procedure t_nntp.GetPreviousArticle;
begin
  if not f_logged_in then login;
  self.SendCommand('LAST');
  self.response;
  GetCurrentArticle;
  end;
(*@\\\0000000401*)

(*@/// procedure t_nntp.response; *)
procedure t_nntp.response;
var
  s: string;
begin
  s:=self.read_line(f_socket);
  if assigned(f_tracer) then
    f_tracer(s,tt_proto_get);
  try
    f_status_nr:=strtoint(copy(s,1,3));
  except
    f_status_nr:=999;
  end;
  f_status_txt:=copy(s,5,length(s));
  if f_status_nr>=400 then
    raise EProtocolError.Create('NNTP',f_status_txt,f_status_nr);
  end;
(*@\\\0000000D01*)
(*@/// procedure t_nntp.GetArticle(group:string; index:integer); *)
procedure t_nntp.GetArticle(const group:string; index:integer);
begin
  self.SendCommand('GROUP '+group);
  self.response;
  GetArticleNr(index);
  end;
(*@\\\0000000301*)
(*@/// procedure t_nntp.GetArticleInternally; *)
procedure t_nntp.GetArticleInternally;
var
  s: string;
begin
  while true do begin
    s:=read_line(f_socket);
    if s<>'.' then
      f_news.add(s)
    else
      BREAK;
    end;
  end;
(*@\\\0000000611*)
(*@\\\0000000D01*)

{ Mail and News text components }
(*@/// class t_mailnews(tcomponent) *)
(*@/// constructor t_mailnews.Create(Aowner:TComponent); *)
constructor t_mailnews.Create(Aowner:TComponent);
begin
  inherited create(AOwner);
  f_body:=TStringList.Create;
  f_add_header:=TStringList.Create;
  f_message:=TStringList.Create;
  end;
(*@\\\0000000603*)
(*@/// destructor t_mailnews.Destroy; *)
destructor t_mailnews.Destroy;
begin
  f_body.Free;
  f_add_header.Free;
  f_message.Free;
  inherited destroy;
  end;
(*@\\\0000000503*)

(*@/// procedure t_mailnews.SetBody(Value: TStringList); *)
procedure t_mailnews.SetBody(Value: TStringList);
begin
  if value=NIL then
    f_body.clear
  else
    f_body.assign(value);
  end;
(*@\\\0000000603*)
(*@/// procedure t_mailnews.SetHeader(Value: TStringList); *)
procedure t_mailnews.SetHeader(Value: TStringList);
begin
  if value=NIL then
    f_add_header.clear
  else
    f_add_header.assign(value);
  end;
(*@\\\0000000603*)

(*@/// procedure t_mailnews.action; *)
procedure t_mailnews.action;
begin
  f_message.insert(0,'From: '+f_from);           (* normally the first *)
  if f_sender<>' then  f_message.add('Sender: '+f_sender);
  f_message.insert(1,'Message-ID: <'+inttostr(round((now-encodedate(1970,1,1))*86400))+'@'
     +my_hostname+'>');
  f_message.insert(2,'Date: '+internet_date(now));
  f_message.insert(3,'Subject: '+f_subject);
  if f_references<>' then  f_message.add('References: '+f_references);
  if f_replyto<>' then  f_message.add('Reply-To: '+f_replyto);
  f_message.addstrings(f_add_header);
  f_message.add(');  (* An empty line to separate header from body *)
  f_message.addstrings(f_body);
  end;
(*@\\\0000000B01*)
(*@\\\0000000701*)
(*@/// class t_mail(t_mailnews) *)
(*@/// constructor t_mail.Create(Aowner:TComponent); *)
constructor t_mail.Create(Aowner:TComponent);
begin
  inherited create(AOwner);
  f_smtp:=NIL;
  f_receipts:=TStringList.Create;
  f_cc:=TStringList.Create;
  f_bcc:=TStringList.Create;
  end;
(*@\\\0000000601*)
(*@/// destructor t_mail.Destroy; *)
destructor t_mail.Destroy;
begin
  f_receipts.Free;
  f_cc.free;
  f_bcc.free;
  inherited destroy;
  end;
(*@\\\0000000601*)

(*@/// procedure t_mail.SetRecipients(Value: TStringList); *)
procedure t_mail.SetRecipients(Value: TStringList);
begin
  if value=NIL then
    f_receipts.clear
  else
    f_receipts.assign(value);
  end;
(*@\\\0000000603*)
(*@/// procedure t_mail.SetCC(Value: TStringList); *)
procedure t_mail.SetCC(Value: TStringList);
begin
  if value=NIL then
    f_cc.clear
  else
    f_cc.assign(value);
  end;
(*@\\\0000000609*)
(*@/// procedure t_mail.SetBCC(Value: TStringList); *)
procedure t_mail.SetBCC(Value: TStringList);
begin
  if value=NIL then
    f_bcc.clear
  else
    f_bcc.assign(value);
  end;
(*@\\\0000000601*)

(*@/// procedure t_mail.action; *)
procedure t_mail.action;
var
  i: integer;
  clear_sender: boolean;
begin
  if (f_smtp=NIL) or (f_receipts=NIL) or (f_receipts.count=0)
    or (f_from=') then  EXIT;
  clear_sender:=(f_smtp.Sender=');
  if clear_sender then begin
    if f_sender<>' then
      f_smtp.sender:=f_sender
    else
      f_smtp.sender:=f_from;
    end;

  if f_disclose_receipts then
    f_message.add('To: disclosed recipients list')
  else
    for i:=0 to f_receipts.count-1 do begin
      f_message.add('To: '+f_receipts.strings[i]);
      end;
  f_smtp.Recipients:=f_receipts;
  for i:=0 to f_cc.count-1 do begin
    f_message.add('CC: '+f_cc.strings[i]);
    f_smtp.Recipients.add(f_cc.strings[i]);
    end;
  for i:=0 to f_bcc.count-1 do begin
    f_smtp.Recipients.add(f_bcc.strings[i]);
    end;

  inherited action;
  f_smtp.message:=f_message;
  f_smtp.action;
  f_message.clear;
  if clear_sender then
    f_smtp.sender:=';
  end;

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有