TCP/IP(八)

原创 2001年07月30日 16:46:00

(*@///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;

TCP/IP协议分析实验

TCP/IP协议数据包简要分析
  • qq_21842575
  • qq_21842575
  • 2016年12月06日 19:40
  • 650

实验三:TCP/IP协议分析实验

一、实验目的  了解TCP/IP协议的工作过程,掌握分析协议的方法,对捕获的数据包逐字段分析,以加深对协议、协议封装及协议数据单元的理解。 二、实验拓扑   三、实验内容 安装...
  • baimeiyunrui
  • baimeiyunrui
  • 2013年04月17日 22:15
  • 1357

TCP/IP学习笔记(八)

 TCP/IP学习笔记(八)一、FTP:文件传输协议  1、 FTP协议:采用2个TCP连接来传输一个文件。  (1) 控制连接:  控制连接通常以客户服务器方式建立。控制连接始终等待客户与服务器的通...
  • Micro_lee
  • Micro_lee
  • 2006年10月16日 16:42
  • 921

tcp/ip(八)

下载第8章Traceroute程序8.1 引言由Van Jacobson编写的Tr a c e r o u t e程序是一个能更深入探索T C P / I P协议的方便可用的工具。尽管不能保证从源端发...
  • ttaitt
  • ttaitt
  • 2010年04月15日 22:34
  • 123

TCP和TCP/IP的区别

TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议, 又叫网络通讯协议,这个协议是Internet国际互联网络的...
  • oro99
  • oro99
  • 2016年04月20日 09:38
  • 1960

tcp/ip协议详解及重点知识整理

一、TCP/IP参考模型   ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。如图2-1所示,是TCP/IP参考模型和...
  • Doraemon___
  • Doraemon___
  • 2016年09月30日 14:43
  • 3260

TCP/IP常见面试题

1.OSI与TCP/IP各层的结构和功能,协议和作用。      OSI七层模型对应TCP/IP四层模型,只是分法不同而已。      应用层:提供应用层服务,文件传输(FTP),电子邮件(SMTP)...
  • hyp1977
  • hyp1977
  • 2016年08月08日 11:13
  • 1613

TCP/IP 原理详解

协议实际上就是一种解决某些问题的策略和模式,在经典的TCP/IP协议中就有很多策略和模式值得学习。归纳起来有以下一些(随着学习深入逐步添加): 分层封装和分用可靠连接 分层 分层是TCP/IP乃至网...
  • Vincent_ceso
  • Vincent_ceso
  • 2016年10月02日 10:44
  • 1787

面试笔试--TCP/IP知识点

下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: 7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、W...
  • hyqwmxsh
  • hyqwmxsh
  • 2016年09月05日 10:02
  • 6772

TCP/IP详解(一)---入门知识

什么是TCP/IP? 我们常说的TCP/IP协议并不是单指TCP协议和IP协议,而是指一组协议簇,其中包含了但不仅限于:TCP协议、IP协议、ICMP协议、POP协议、SMTP协议、FTP协议等。关于...
  • wh1511995112
  • wh1511995112
  • 2016年05月10日 11:09
  • 2046
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP/IP(八)
举报原因:
原因补充:

(最多只允许输入30个字)