delphi網絡編程_第1頁
delphi網絡編程_第2頁
delphi網絡編程_第3頁
delphi網絡編程_第4頁
delphi網絡編程_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 11 網絡編程網絡編程 11.1 VCL Forms Application中中Internet編程編程 Indy是完全基于Socket阻塞工作模式的開發(fā)庫,阻塞模式有以下優(yōu)點: (1)編程簡單。所有代碼能以有序的形式存在于同一位置,順序執(zhí)行,而不用分散在不同的事件處理代碼段里。 (2)移植容易。由于Unix采用blocking套接字,所以用blocking套接字的程序更易于移植到Unix平臺。 (3)易在多線程程序里使用。由于blocking套接字是串行的,所有很容易在線程中使用。阻塞模式的代碼放在一起,可以方便地把這些代碼封裝在線程里面使用。 11.1.1 Indy組件包簡介組件包簡介

2、Delphi 2006的Indy組件包主要有5個部分,分別為: (1)Indy Clients:Indy Clients頁面提供許多支持常見的Internet協(xié)議的客戶端組件。這些組件簡單易用,即使服務是多線程,也允許按順序提交事務。這樣可以很方便地用它們來開發(fā)各種客戶端軟件。 (2)Indy Servers:Indy Servers頁面提供了許多常見的Internet協(xié)議的服務器端組件。利用這些組件可以簡捷、靈活的開發(fā)多線程且功能強大的服務器端軟件。 (3)Indy Intercepts:Indy Intercepts頁面中的組件多用來對將要發(fā)送和已經接收的數據進行二次處理,入壓縮解壓、加密

3、解壓、日志記錄等。11.1 VCL Forms Application中中Internet編程編程 (4)Indy I/O Handlers:Indy I/O Handlers頁面中的組件是進行數據輸入輸出的相關操作的。 (5)Indy Misc:Indy Misc頁面中的組件提供了一些輔助功能,諸如對郵件的編碼解碼、查詢網絡狀態(tài)。 所有Indy組件都以Id為前綴。這套網絡組件不但功能強大,而且使用起來非常簡單、方便,表11.1表11.5給出了這5部分組件的概括。表表11.1 Indy Clients主要組件說明主要組件說明組件名稱組件名稱描描 述述IdTCPClient封裝了TCP客戶端的所

4、有功能,包括套接字支持,用于編寫TCP客戶端軟件或派生其他類。IdEcho將Echo協(xié)議中的內容封裝成為TidEcho數據。IdFinger在客戶端實現了應用Finger協(xié)議的功能。IdGopher在客戶端實現了應用Gopher協(xié)議的功能。IdUDPClient封裝了UDP客戶端的所有功能,包括套接字支持,用于編寫UDP客戶端軟件或派生其他類。IdFTP實現FTP協(xié)議,可用于編寫FTP客戶端軟件。11.1 VCL Forms Application中中Internet編程編程IdHTTP支持HTTP協(xié)議1.0及1.1版本的客戶端,可編寫瀏覽器。IdIcmpClient發(fā)送ICMP包探測主機信息

5、。IdIRC實現IRC(Internet Relay Client)協(xié)議,用于編寫即時通信類客戶端軟件。IdPOP3實現POP3協(xié)議,用于編寫郵件接收客戶端軟件。IdTime在客戶端實現了應用Time協(xié)議的功能。IdWhois在客戶端實現了應用Whois協(xié)議的功能。IdSMTP實現SMTP協(xié)議,用于編寫郵件發(fā)送客戶端軟件。11.1 VCL Forms Application中中Internet編程編程表表11.2 Indy Servers主要組件說明主要組件說明組件名稱組件名稱描描 述述IdTCPServer封裝了全套TCP服務器端的功能,包括socket支持。可以直接應用到服務器端或用于制作

6、組件時作為基類。IdUDPServer封裝了完整的多線程UDP服務。IdEchoServer 將Echo協(xié)議中的內容封裝成為服務器端應用的TIdEchoServer數據類型。IdFingerServer在服務器端實現了應用Finger協(xié)議的功能。IdGopherServer在服務器端實現了應用了Gropher協(xié)議的功能。IdFTP實現FTP協(xié)議,用于編寫FTP服務器端軟件。IdHTTP支持HTTP協(xié)議1.0及1.1版本的服務器端,可編寫瀏覽器。IdPOP3Server實現POP3協(xié)議,用于編寫郵件接收服務器端軟件。IdTimeServer在服務器端實現了應用Time協(xié)議的功能。IdWhoisS

7、erver在服務器端實現了應用Whois協(xié)議的功能。IdSMTPServer實現SMTP協(xié)議,用于編寫郵件發(fā)送服務器端軟件。11.1 VCL Forms Application中中Internet編程編程表表11.3 IndyIntercepts主要組件說明主要組件說明組件名稱組件名稱描描 述述IdConnectionIntercept用于制定一種socket處理架構來處理狀態(tài)變化和數據傳輸任務。IdLogEvent基于事件的類,記錄數據輸入輸出和狀態(tài)的日志。表表11.4 Indy I/O Handlers主要組件說明主要組件說明組件名稱組件名稱描描 述述IdIOHandlerStrack應用

8、棧實現的輸入輸出控制。表表11.5 Indy Misc主要組件說明主要組件說明組件名稱組件名稱描描 述述IdCookieManager在Indy客戶端實現了對Cookie的管理。IdEncoderMime用于對二進制數據進行Mime標準編碼,而轉化為文本文件。IdEncoderUUE用于對二進制數據進行UUE標準編碼,而轉化為文本文件。IdEncoderXXE用于對二進制數據進行XXE標準編碼,而轉化為文本文件。IdEncoderQuotedPrintable用于對二進制數據進行可顯示打印字符編碼,而轉化為文本文件。IdMessage基于各種消息協(xié)議,封裝了完整Internet消息。11.1

9、VCL Forms Application中中Internet編程編程11.1.2 E-Mail客戶端程序開發(fā)客戶端程序開發(fā) 在TCP/IP協(xié)議組中,有關電子郵件的協(xié)議主要有: (1)SMTP(Simple Mail Transfer Protocol)。SMTP即簡單郵件傳輸協(xié)議,它著重底層郵件交付系統(tǒng)如何將郵件從一臺機器傳輸到另一臺機器。SMTP并沒有規(guī)定如何從用戶接收郵件,或者用戶接口如何將收到的郵件交給用戶。SMTP非常直觀和簡單,客戶和服務器之間的通信完全是通過可讀的ASCII文本組成。 (2)POP3(Post Office Protocol)。POP3即郵局協(xié)議,版本為3,它規(guī)定

10、了如何把郵件從郵件服務器上傳送到本地計算機中。 (3)IMAP4(Internet Message Acsess Protocol)。Internet郵件訪問協(xié)議版本4,簡稱為IMAP4,是POP3的一種代替協(xié)議。IMAP4和POP3使用同樣的模式,但是前者與后者不同的是,前者允許用戶動態(tài)創(chuàng)建、刪除和重命名郵箱。 (4)MIME(Multipuerpose Internet Mail Extension)。為了通過電子郵件發(fā)送非ASCII數據,IEFT定義了多用途Internet郵件擴展MIME。MIME并沒有改動SMTP或者POP3,而是允許用ASCII碼對任意數據進行編碼,然后在標準電子郵

11、件中傳輸。11.1 VCL Forms Application中中Internet編程編程 1. IdSMTP和和IdPOP3組件組件 IdPOP3組件是Borland從Nevrona公司引進的,用于從支持POP3協(xié)議的服務器,包括運行UNIX的主機檢索電子郵件。POP組件支持身份驗證登錄,能夠檢索到用戶信箱信息,如信箱中有幾封郵件等。IdPOP3組件還能夠直接在服務器上刪除郵件。下面將簡單介紹IdPOP3組件的主要屬性和函數,如表11.6和表11.7所示。表表11.6 IdPOP3主要屬性主要屬性屬屬 性性描描 述述BoundIP指定客戶端IPBoundPort指定本地連接的首選端口Host

12、遠程主機名Password登錄密碼Port服務器端口ReadTimeout讀取超時Username登錄用戶名11.1 VCL Forms Application中中Internet編程編程表表11.7 IdPOP3主要屬性主要屬性屬屬 性性描描 述述CheckMessages獲取服務器上郵箱里的郵件數Connect打開客戶端連接Create(AOwner:TComponent)創(chuàng)建連接實例Delete(const MsgNum:Integer)向服務器發(fā)出刪除信息Disconnect關閉與服務器的連接GetResponse(const AAllowedResponses:array of Sm

13、allInt提供POP3協(xié)議需求的響應編碼KeepAlive防止連接超時Retrieve(const MsgNum:Integer;AMsg:TIdMessage)取回郵件編號RetrieveHeader(const MsgNum:Integer;AMsg:TIdMessage)取回郵件頭部RetrieveMailBoxSize獲取服務器上郵箱的容量RetrieveRaw(const aMsgNo:Integer;const Dest TStrings)不經MIME解碼取回郵件頭和郵件正文UIDL(const ADest:TStrings;const AMsgNum:Integer=-1)取回

14、郵箱中郵件的ID列表11.1 VCL Forms Application中中Internet編程編程 IdPOP3組件的事件往往是與調用某個方法相關聯的,如果事件被觸發(fā),通常表示調用成功,可以處理事件的句柄中得到POP服務器的返回信息。表11.8 列出IdPOP3的主要事件。表表11.8 IdPOP3的主要事件的主要事件事事 件件描描 述述OnConnected連接成功OnDisconnected斷開連接OnStatus本組件的狀態(tài)發(fā)生變化OnWork讀取或寫入緩沖區(qū)OnWorkBegin開始讀取或寫入緩沖區(qū)OnWorkEnd停止讀取或寫入緩沖區(qū)11.1 VCL Forms Applicati

15、on中中Internet編程編程 以上簡單介紹了IdPOP3組件,它主要用于接收郵件。下面介紹的IdSMTP組件,它主要用于從SMTP服務器上發(fā)送郵件。表11.9、表11.10和表11.11簡單介紹了IdSMTP組件的主要屬性、函數和事件。表表11.9 IdSMTP的主要屬性的主要屬性屬屬 性性描描 述述AuthTypeSMTP的驗證類型BoundIP指定客戶端IPBoundPort指定本地連接的首選端口HeloName區(qū)分服務器上的客戶端連接Host遠程主機名MailAgent郵件代理Password登錄密碼Port服務器端口號ReadTimeout讀取超時UseEhlo客戶端向服務器請求的

16、驗證類型Username登錄用戶名11.1 VCL Forms Application中中Internet編程編程表表11.10 IdSMTP的主要函數的主要函數函函 數數描描 述述Assign(Source:TPersistent)復制屬性值到當前實例Authenticate在服務器上進行驗證Connect打開服務器連接Create(AOwner:TComponent)創(chuàng)建連接實例Destroy銷毀連接實例Disconnect關閉與服務器的連接Expand(AUserName:String;AResults:TStrings)決定郵件列表或郵箱別名的組成員QuickSend(self:cla

17、ss of TIdSMTP;const AHost:String;const:ASubject:String;const ATo:String;const AFrom:String;const AText:String)不通過Indy郵件實例發(fā)送郵件Send(AMsg:TIdMessage)向服務器發(fā)送Indy郵件Verify(AUserName:String)驗證別名是否為服務器用戶11.1 VCL Forms Application中中Internet編程編程表表11.11 IdSMTP的主要事件的主要事件事事 件件描描 述述OnConnected連接成功OnDisconnected斷開連

18、接OnStatus本組件的狀態(tài)發(fā)生變化OnWork讀取或寫入緩沖區(qū)OnWorkBegin開始讀取或寫入緩沖區(qū)OnWorkEnd停止讀取或寫入緩沖區(qū) 2. IdMessage組件組件 IdMessage組件完整封裝了互聯網消息體,即通常所說的電子郵件。在用IdPOP3接收郵件和IdSMTP發(fā)送郵件時,郵件是存放在IdMessage實體里進行傳輸的。IdMessage組件的主要屬性和函數如表11.12、表11.13。11.1 VCL Forms Application中中Internet編程編程表表11.12 IdMessage的主要屬性的主要屬性屬屬 性性描描 述述AttachmentEncod

19、ing待發(fā)送郵件的默認編碼機制BccList抄送列表Body郵件的正文文本CCList收件人列表CharSet郵件的字符集ContentDiposition郵件的介紹及存儲的參數ContentTransferEncodingMIME編碼方式ContentTypeMIME類型Date發(fā)送時間Encoding郵件的編碼算法ExtraHeaders郵件的附加頭部Flags描述郵箱的標志From郵件的原作者Headers郵件頭部的取值IsEncoded郵件是否采用MIME編碼11.1 VCL Forms Application中中Internet編程編程MessageParts郵件的各部分列表MIME

20、BoundaryMIME的邊界記號MsgId郵件描述性標識符NewGroups接收該郵件的新聞組NoDecode收到的郵件是否不解碼NoEncode發(fā)出的郵件是否不編碼Organization郵件作者所屬組織Priority郵件的優(yōu)先級ReceiptRecipient收件人地址Recipients收件人References回復內容ReplyTo回復地址Sender發(fā)送人Subject郵件主題UID郵件標識符UseNowForDate使用當前時間作為郵件發(fā)送時間11.1 VCL Forms Application中中Internet編程編程表表11.13 IdMessage的主要函數的主要函數函

21、函 數數描描 述述AddHeader(const Value:string)添加郵件的頭部Clear清空郵件實體ClearBody清空郵件體ClearHeader清空郵件頭部Create構造實體Destroy銷毀實體GenerateHeader創(chuàng)建郵件頭部列表LoadFromFile(const AFileName:string;const AHeadersOnly:Boolean=False)從文件載入郵件LoadFromStream(AStream:TStream;const AHeadersOnly:Boolean=False)從輸入流載入郵件ProcessHeaders刷新郵件頭部信息

22、SaveToFile(const AFileName:String;const AHeadersOnly:Boolean=False)保存郵件到文件SaveToStream(const AFileName:String;const AHeadersOnly:Boolean=False)保存郵件到輸出流11.1 VCL Forms Application中中Internet編程編程 【例例11.1】利用IdPOP3和IdSMTP組件實現E-Mail收發(fā)程序。此程序一共包括3個窗體,主窗體FormMain用于接收和顯示郵件并管理其他窗體;FormNewMail用于寫新郵件并發(fā)送;FormConfi

23、g用于用戶信息設置。 (1)選擇FileNewVCL Forms Application,創(chuàng)建一個VCL應用程序。 (2)在主窗體上放置一個IdPOP3組件來完成接收郵件的功能,一個IdMessage組件存儲郵件內容,一個保存對話框來保存附件,一個ListView組件顯示收到的郵件,一個Memo組件顯示郵件的正文,一個ListView組件顯示附件文件列表,同時窗體下方放置了一個TStatusBar組件用以顯示各種顯示,如圖11.1所示。 主菜單設計如圖11.2所示。圖圖11.1主窗體界面主窗體界面 圖圖11.2主菜單主菜單11.1 VCL Forms Application中中Internet

24、編程編程主窗體和組件的主要屬性如表11.14所示。 表表11.14主窗體主要組件的屬性主窗體主要組件的屬性組件類型組件類型組件名組件名屬性名屬性名設置值設置值窗體(Form)FormMainCaption我的郵件TListViewlvMailAlignalTopCheckboxesTrueColumns0.CaptionColumns1.Caption主題Columns2.Caption發(fā)送人Columns3.Caption發(fā)送時間Columns4.Caption大小ViewStylevsReportTmemomemoMailAlignalClientScrollBarsssVerticalT

25、ListViewLvAttachAlignalRightColumns0.CaptionColumns1.Caption附件11.1 VCL Forms Application中中Internet編程編程 (3)添加一個新窗體,命名為FormNewMail。在這個窗體上主要放置了1個IdSMTP組件用來完成發(fā)送郵件的功能;1個Memo組件用來寫郵件正文;4個Edit組件用來輸入郵件信頭信息。該窗體的設計界面如圖11.3所示。圖圖11.3窗體窗體FormNewMail設計界面設計界面11.1 VCL Forms Application中中Internet編程編程窗體FormNewMail上的組件

26、的主要屬性設置如表11.15所示。 表表11.15 FormNewMail中主要組件的屬性中主要組件的屬性組件類型組件類型組件名組件名屬性名屬性名設置值設置值窗體(Form)FormNewMailCaption寫新郵件面板(Panel)Panel1AlignalTop文本框(Edit)edtToAdderssTextedtCarbonCopyTextedtSubjectText組合框(Combobox)cmbAttachText文本框(Memo)memoNewMailAlignalClient命令按鈕(Button)btnSendCaption發(fā)送btnAttachCaption附件11.1

27、VCL Forms Application中中Internet編程編程(4)新增一個窗體,命名為FormConfig,用來設置信息,其設計界面如圖11.4所示。圖圖11.4設計窗體設計窗體FormConfig11.1 VCL Forms Application中中Internet編程編程窗體FormConfig上的主要組件的屬性設置如表11.16所示。 表表11.16窗體窗體FormConfig主要組件的屬性設置主要組件的屬性設置組件類型組件類型組件名組件名屬性名屬性名設置值設置值窗體(Form)FormConfigCaption設置文本框(Edit)edtPOP3TextEdtSMTPTex

28、tedtUserTextedtNameTextedtReplyToTextedtPwTextPasswordChar*復選按鈕(CheckBox)CheckBox1Caption收信后在服務器上刪除郵件位圖按鈕(BitBtn) btnOkKindbkOk11.1 VCL Forms Application中中Internet編程編程(5)編寫代碼。菜單項“文件|接收郵件”的OnClick事件中的代碼:procedure TFormMain.N2Click(Sender: TObject);var Index: Integer; MailSum: LongWord; MailItem: TLis

29、tItem;begin FormConfig.ShowModal; lvEMail.Items.Clear; if IdPOP31.Connected then IdPOP31.Connect else begin IdPOP31.Host := FormConfig.edtPOP3.Text; IdPOP31.Port := strtoint(FormConfig.edtPOP3Port.Text); IdPOP31.Username := FormConfig.edtUser.Text; IdPOP31.Password := FormConfig.edtPw.Text; IdPOP31.

30、ReadTimeout := 20000; IdPOP31.Connect;11.1 VCL Forms Application中中Internet編程編程 MailSum := IdPOP31.CheckMessages; /獲取郵件數 if MailSum 0 then StatusBar1.SimpleText := 共有 + IntToStr(MailSum) + 封郵件 else showmessage(沒有郵件); for Index := 1 to MailSum do begin IdMessage1.Clear; IdPOP31.RetrieveHeader(Index,Id

31、Message1); /獲取郵件頭部信息 MailItem := lvEMail.Items.Add; MailItem.SubItems.Add(IdMessage1.Subject); MailItem.SubItems.Add(IdMessage1.From.Text); MailItem.SubItems.Add(FormatDateTime(yyyy-mm-dd hh:mm:ss,IdMessage1.Date); MailItem.SubItems.Add(IntToStr(IdPOP31.RetrieveMsgSize(Index) div 1024) + K); IdMessa

32、ge1.Clear; IdPOP31.Retrieve(Index,IdMessage1); /獲取郵件 IdMessage1.MessageParts.CountParts; /獲取郵件的分部計數 if IdMessage1.MessageParts.AttachmentCount 0 then MailItem.ImageIndex := 5 /有附件11.1 VCL Forms Application中中Internet編程編程 else MailItem.ImageIndex := 4; end; end;end;lvMail的OnClick事件中的代碼:procedure TForm

33、Main.lvEmailClick(Sender: TObject);var Index: integer; AttachItem: TListItem;begin MemoMail.Lines.Clear; lvAttach.Items.Clear; IdMessage1.Clear; IdMessage1.ContentType := multipart/*; /郵件類型 StatusBar1.SimpleText := 開始接收; IdPOP31.Retrieve(lvEMail.ItemIndex + 1,IdMessage1); StatusBar1.SimpleText := 接收

34、完畢; memoMail.Lines := IdMessage1.Body; /郵件正文 for Index := 0 to Pred(IdMessage1.MessageParts.Count) do11.1 VCL Forms Application中中Internet編程編程 begin if IdMessage1.MessageParts.ItemsIndex is TIdAttachment then begin /附件 AttachItem := lvAttach.Items.Add; AttachItem.Caption := IntToStr(Index); AttachIte

35、m.SubItems.Add(TIdAttachment(IdMessage1.MessageParts.ItemsIndex).FileName); end else if IdMessage1.MessageParts.ItemsIndex is TIdText then begin MemoMail.Lines.Clear; MemoMail.Lines.AddStrings(TIdText(IdMessage1.MessageParts.ItemsIndex).Body); end; end;end;對于郵件中的附件應該另外保存,當雙擊附件時調用公用保存對話框來實現這一功能。LvAtt

36、ach的OnDbClick事件中的代碼為:procedure TFormMain.lvAttachClick(Sender: TObject);var Index: Integer;11.1 VCL Forms Application中中Internet編程編程begin Index := StrToInt(lvAttach.ItemFocused.Caption); /這里暗藏了序號 if SaveDialog1.Execute then TIdAttachment(IdMessage1.MessageParts.ItemsIndex).SaveToFile(SaveDialog1.File

37、Name);end; 在菜單項“文件|刪除郵件”將在郵件服務器上刪除組件lvMail中被用戶選中的郵件,OnClick事件中的代碼如下:procedure TFormMain.N3Click(Sender: TObject);var i: Integer;begin for i := 0 to lvEMail.Items.Count - 1 do if lvEmail.Items.Itemi.Checked then IdPOP31.Delete(i + 1);end; 在菜單項“文件|斷開連接”的OnClick事件中的代碼:procedure TFormMain.N4Click(Sender

38、: TObject);begin IdPOP31.Disconnect;11.1 VCL Forms Application中中Internet編程編程 lvEmail.Items.Clear; memoMail.Lines.Clear; lvAttach.Items.Clear; end; 以上是郵件接收功能的代碼,郵件發(fā)送的代碼則在FormNewMail中實現。為了顯示此窗體,在窗體的菜單項“文件|寫新郵件”的OnClick事件中添加如下代碼:procedure TFormMain.N5Click(Sender: TObject);begin FormConfig.ShowModal; F

39、ormNewMail.Show;end;FormNewMail窗體的btnAttach的OnClick事件中的代碼:procedure TFormNewMail. btnAttachClick(Sender: TObject);begin if OpenDialog1.Execute then cmbAttach.Items.Add(OpenDialog1.FileName);end;FormNewMail窗體的btnSend的OnClick事件中的代碼 11.1 VCL Forms Application中中Internet編程編程procedure TFormNewMail. btnSen

40、dClick(Sender: TObject);var i: Integer;begin if not IdSMTP1.Connected then begin /if FormConfig.AuthType.Checked then /IdSMTP1.AuthType IdSMTP1.Host := FormConfig.edtSMTP.Text; IdSMTP1.Port := StrToInt(FormConfig.edtSMTPPort.Text); IdSMTP1.Username := FormConfig.edtUser.Text; IdSMTP1.Password := For

41、mConfig.edtPw.Text; IdSMTP1.Connect; end; StatusBar1.SimpleText := 已和服務器建立連接; with IdMessage1 do begin From.Address := FormConfig.edtReplyTo.Text; /發(fā)件人地址 From.Name := FormConfig.edtName.Text;11.1 VCL Forms Application中中Internet編程編程 Recipients.EMailAddresses := edtToAddress.Text; /收件人地址 CCList.EMailA

42、ddresses := edtCArbonCopy.Text; ReplyTo.EMailAddresses := FormConfig.edtReplyTo.Text; Subject := edtSubject.Text; /郵件主題 CharSet := GB2312_CHARSET; ContentType := multipart/*; TIdText.Create(MessageParts,MemoNewMail.Lines); /郵件正文 end; for i := 1 to cmbAttach.Items.Count do TIdAttachmentFile.Create (I

43、dMessage1.MessageParts,cmbAttach.Items.Stringsi-1); /發(fā)送郵件 try IdSMTP1.Send(IdMessage1); finally IdSMTP1.Disconnect; end;end;11.1 VCL Forms Application中中Internet編程編程(6)編譯鏈接后,其運行結果如圖11.5、圖11.6和圖11.7所示。 圖圖11.5 接收郵件界面接收郵件界面 圖圖11.6設置接收和發(fā)送服務器設置接收和發(fā)送服務器圖圖11.7編輯、發(fā)送新郵件編輯、發(fā)送新郵件11.1 VCL Forms Application中中Inte

44、rnet編程編程 11.1.3 HTTP協(xié)議的處理協(xié)議的處理 HTTP數據包包括了標題和內容兩部分。本小節(jié)通過一個示例,簡單說明IdHTTP組件的使用方法。 【例例11.2】當用戶輸入正確的URL地址時,程序利用IdHTTP組件來解析出HTTP數據包中的各部分內容。 (1)選擇FileNewVCL Forms Application,新建一個VCL工程。在窗體上依次放上如圖11.8所示的組件。圖圖11.8窗體設計界面窗體設計界面11.1 VCL Forms Application中中Internet編程編程各組件的主要屬性如表11.17所示。表表11.17 各組件的主要屬性各組件的主要屬性組件

45、類型組件類型組件名組件名屬性名屬性名設置值設置值窗體(Form)FormMainCaptionHTTP協(xié)議示例組合框(comboBox) cmbURLTextcmbProtocolItem1.01.1TextcmbMethodItemHeadGetText文本編輯框(Memo) Memo1Lines命令按鈕(Button)BtnGetCaption獲取btnStopCaption停止標簽(Label)Label1CaptionURLLabel2Caption協(xié)議版本Label3Caption方法選擇IdHTTPIdHTTP1屬性均為默認值11.1 VCL Forms Application中中

46、Internet編程編程(2)編程代碼。主窗體的OnCreate事件中的代碼:procedure TFormMain.FormCreate(Sender: TObject);begin progressbar1.Parent := StatusBar1; ProgressBar1.Top := 2; ProgressBar1.Left := 1;end;主窗體的OnClose事件中的代碼:procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);begin button2.OnClick(nil); try

47、 cmbURL.Items.SaveToFile(ExtractFilePath(ParamStr(0)+log.dat); except end;end;11.1 VCL Forms Application中中Internet編程編程主窗體的OnActivate事件中的代碼:procedure TFormMain.FormActivate(Sender: TObject);begin button2.Enabled := false; cmbMethod.ItemIndex := 1; cmbProtocol.ItemIndex := 0; cmbProtocol.OnChange(nil)

48、; bPostFile := False; if FileExists(ExtractFilePath(ParamStr(0)+log.dat) then cmbURL.Items.LoadFromFile(ExtractFilePath(ParamStr(0)+log.dat);end;組件cmbProtocol的OnChange事件中的代碼:procedure TFormMain.cmbProtocolChange(Sender: TObject);begin case cmbProtocol.ItemIndex of 0: IdHTTP1.ProtocolVersion := pv1_0

49、; 1: IdHTTP1.ProtocolVersion := pv1_1; end;end;11.1 VCL Forms Application中中Internet編程編程組件cmbURL的OnChange事件中的代碼:procedure TFormMain.cmbURLChange(Sender: TObject);begin btnGet.Enabled := Length(cmbURL.Text) 0;end;組件btnStop的OnClick事件中的代碼:procedure TFormMain. btnStop Click(Sender: TObject);begin IdHTTP1

50、.Disconnect; btnStop.Enabled := False; Screen.Cursor := crDefault;end;組件btnGet的OnClick事件中的代碼:procedure TFormMain.btnGetClick(Sender: TObject);var Source: TMemoryStream; Response: TStringStream;begin11.1 VCL Forms Application中中Internet編程編程if cmbURL.Items.IndexOf(cmbURL.Text) = -1 then cmbURL.Items.Ad

51、d(cmbURL.Text); Screen.Cursor := crHourGlass; btnStop.Enabled := True; btnGet.Enabled := False; try memo1.Clear; case cmbMethod.ItemIndex of 0: begin IdHTTP1.Head(cmbURL.Text); memo1.Lines.Add(Content- Type:+IdHTTP1.Response.ContentType); memo1.Lines.Add(Date:+DateToStr(IdHTTP1.Response.Date); end;

52、1: begin memo1.Lines.Text := IdHTTP1.Get(cmbURL.Text); end; end;11.1 VCL Forms Application中中Internet編程編程finally Screen.Cursor := crDefault; btnStop.Enabled := False; btnGet.Enabled := True; end;end;組件IdHTTP1的OnStatus事件中的代碼:procedure TFormMain.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;

53、 const AStatusText: string);begin statusBar1.Panels1.Text := AStatusText;end;組件IdHTTP1的OnWork事件中的代碼:procedure TFormMain.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);begin if ProgressBar1.Max 0 then begin StatusBar1.Panels1.Text := IntToStr(AWorkCount) + 字節(jié)共 11.1 VCL Forms

54、 Application中中Internet編程編程+ IntToStr(ProgressBar1.Max)+字節(jié)。; ProgressBar1.Position := AWorkCount; end else StatusBar1.Panels1.Text := IntToStr(AWorkCount) + 字節(jié)。;end;組件IdHTTP1的OnWorkBegin事件中的代碼:procedure TFormMain.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);begin P

55、rogressBar1.Position := 0; ProgressBar1.Max := AWorkCountMax; if AWorkCountMax 0 then StatusBar1.Panels1.Text := 已傳送: + IntToStr(AWorkCountMax);end;組件IdHTTP1的OnWorkEnd事件中的代碼:procedure TFormMain.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);begin StatusBar1.Panels1.Text := 完成; ProgressBar1.P

56、osition := 0;end;11.1 VCL Forms Application中中Internet編程編程(3)編譯運行程序,運行結果如圖11.9所示。圖圖11.9 HTTP示例運行結果示例運行結果11.2 Windows Forms Application中中Internet編程編程 11.2.1 在在. NET中開發(fā)郵件發(fā)送工具中開發(fā)郵件發(fā)送工具(1)單擊ComponentInstalled .NET Components.,彈出Installed .NET Components對話框,如圖11.10所示。圖圖11.10 Installed .NET Components對話框對話

57、框11.2 Windows Forms Application中中Internet編程編程 (2)在圖11.10所示的圖中,選擇Microsoft MAPI Session Control和Microsoft MAPI Messages Control,單擊“OK”按鈕即可完成該組件地添加。 【例例11.3】利用Microsoft MAPI Control組件實現發(fā)送郵件。 (1)選擇FileNewWindows Forms Application,新建一個WinForm工程。在窗體上依次放上如圖11.11所示的組件。圖圖11.11發(fā)送郵件的設計界面發(fā)送郵件的設計界面11.2 Windows

58、Forms Application中中Internet編程編程(2)各組件的名稱及屬性如表11.18所示。表表11.18 各組件的主要屬性各組件的主要屬性組件類型組件類型組件名組件名屬性名屬性名設置值設置值窗體(Form)TwinFormText利用MAPI發(fā)送郵件標簽(Label)Label1Text收信人姓名Label2Text收信人地址Label3Text主題Label4Text信息Label5Text附件文本框(TextBox)txtNameTexttxtAdderssTexttxtSubjectTexttxtMessageTexttxtAttachmentText命令按鈕(Butto

59、n)btnSendText發(fā)送btnAttachmentText附件Microsoft MAPI ControlAxMAPISession1默認設置AxMAPIMessages1默認設置對話框(OpenFileDialog)OpenFileDialog1默認設置11.2 Windows Forms Application中中Internet編程編程(3)編寫代碼。下面為應用程序添加代碼來完善各功能。btnSend組件的Click事件中的代碼:procedure TWinForm.btnSend_Click(sender: System.Object; e: System.EventArgs);

60、begin AxMAPISession1.SignOn; /開始MAPI會話/當MAPI會話建立后,Session所產生的Hadle會存于SessionID屬性中 if AxMAPISession1.SessionID 0 then begin/建立MAPIMessages與MAPISession間有效的關聯 AxMAPIMessages1.SessionID := AxMAPISession1.SessionID; AxMAPIMessages1.Compose; /建立新的E-mail消息 AxMAPIMessages1.RecipDisplayName := txtName.Text;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論