二十三章InterNet网路程式设计.ppt
《二十三章InterNet网路程式设计.ppt》由会员分享,可在线阅读,更多相关《二十三章InterNet网路程式设计.ppt(89页珍藏版)》请在三一文库上搜索。
1、1,第二十三章 InterNet網路程式設計,有沒有想過自己寫個Service呢?想不想自己也寫一套發信程式呢?在這一章節裡,我們將介紹socket的觀念以及BCB在Internet上開發應用程式的方法。,2,大綱,23-1. Socket觀念 23-2. 哪些VCL元件可以使用 23-3. 寄信程式 23-4. HTTP 抓網頁程式 23-5. 一些Client端的小程式 23-6. 聊天室 23-7. CGI程式設計 本章習題,3,23-1. Socket觀念,Socket是一種API,他介於網路應用程式跟通訊協定之間,他就像是一般的程式中提供的函式一樣,只不過Socket是專用於網路程式
2、之中。所以說,Socket也屬於System call,讓使用者可以在程式中直接呼叫,就好像在C/C+語言中你要輸入就需要使用scanf、cin或是輸出時會用到printf、cout等等。 雖然說使用Socket就像使用一般的函式一樣簡單,但是還是必須要具備一些基本的通訊協定概念,不然什麼時候要呼叫socket()、bind()等函式就一頭霧水了,只是我們只需要了解,不需要知道怎麼寫出這些API。,4,23-1. Socket觀念,Socket最早是出現在BSD系列的Unix主機中,所以現在大家在學習Socket的過程中,最常聽到的就是Berkeley Socket。當然現在我們是在Windo
3、ws上寫Socket的程式,所以我們使用的Socket就被稱做Win Socket。 會叫做Berkeley的原因是BSD中的B就是Berkeley。 Win Socket跟Berkeley Socket有什麼不同? 除了作業系統(開發環境)的不同外,其餘皆大同小異,因為大家通常都會遵循著Berkeley Socket的標準來開發整個Socket的API。,5,23-1. Socket觀念,Socket的定義 網路連線的兩端之間,為了要互相聯繫以及溝通所用的介面就稱做Socket。這兩端無論是不是在LAN內都可以。 在Unix下要寫網路程式真的需要對整個Socket以及通訊協定有一定的熟悉度,
4、但是現在BCB打破了如此的迷失。BCB內部提供了Server/Client Socket供Server端以及Client端使用,我們不需要自己慢慢寫程式碼來建立連線,你只要設定好Server/Client Socket的一些屬性,BCB就會幫你完成一堆瑣碎的事情。 我們所要考慮的只剩下該如何設計整個網路程式的主體。,6,23-2. 哪些VCL元件可以使用,在BCB6中撰寫有關網路的程式,會有許多的VCL元件可供我們使用。 例如Webservices、InternetExpress、Internet、WebSnap、FastNet、Indy Clients、以及Indy Servers等等,都是
5、發展網路相關程式的元件。 在這一章裡,我們主要要介紹的元件都分布在Internet和FastNet這兩個Page中,包括Client/Server Socket或是其他已經包裝好的VCL元件都可以找的到。,7,23-2. 哪些VCL元件可以使用,InterNet中比較常用到的元件 ClientSocket Client端的TCP Socket API。可以利用這個元件讓我們使用TCP通訊協定開發Client端的網路應用程式 ServerSocket Server端的TCP Socket API。可以利用這個元件讓我們使用TCP通訊協定開發Server端的網路應用程式 FastNet中比較常用到
6、的元件 NMDayTime 可以傳回Server端的日期以及時間 NMMsg 傳送一般的文字訊息,8,23-2. 哪些VCL元件可以使用,FastNet中比較常用到的元件 NMMSGServ 接收一般的文字訊息 NMEcho 傳送或是接收訊息,和NMMsg以及NMMSGServ有部分相似 NMFTP 設計FTP Client端的VCL元件,主要用來檔案傳輸 NMHTTP 利用HTTP通訊協定取得HTML的文件 NMNNTP 從新聞伺服器接收文章,或是傳送文章到新聞伺服器,9,23-2. 哪些VCL元件可以使用,FastNet中比較常用到的元件 NMStrm 傳送資料流 NMStrmServ 接
7、收NMStrm送過來的資料流 NMPOP3 使用POP3通訊協定來接收或是傳送信件 NMSMTP 使用SMTP通訊協定來傳送郵件 NMTime 可以傳回Server端的時間,10,23-2. 哪些VCL元件可以使用,FastNet中比較常用到的元件 NMUDP 傳輸的通訊協定改用UDP Protocol NMURL 將URL編碼/解碼成一般的文字字串 NMUUProcess 使用MIME或是UU En/Decode來編碼/解碼 NMFinger 獲得Server端使用者的訊息,11,23-3. 寄信程式,在這一小節我們將寫一個小小的寄信程式,讓使用者可以直接在電腦上寄出信件。 這個程式可以說是
8、相當的簡單,看起來似乎不太像是網路程式,其實最主要是因為這些底層的程式碼BCB都幫我們包裝好了,所以才不需要寫太多程式碼。這個程式我們將會放在範例23-1中。,12,23-3. 寄信程式,範例23-1:寄信程式的開發 範例說明 範例23-1主要是希望可以利用BCB強大又好用的VCL元件快速的開發出一個寄信程式出來,在這個範例中,我們主要使用了FastNet中的NMSMTP這個VCL元件來寄信。整個開發過程我們完全不需要知道任何跟網路相關的知識,我們只需要知道NMSMTP中的各個屬性該填入什麼樣的值即可! 範例23-1的設計畫面 用到LabeledEdit、Memo、ListBox、BitBtn
9、、StatusBar、NMSMTP、以及OpenDialog這七種VCL元件,13,23-3. 寄信程式,範例23-1:寄信程式的開發 設定OpenDialog 將OpenDialog中的ofAllowMultiSelect這個屬 性的值改成true,讓使用者在選擇附加檔案 的時候可以多重選擇。 也將Filter的值設定成All File|*,也就是 預設讀取所有的檔案。,14,23-3. 寄信程式,範例23-1:寄信程式的開發 功能的需求 選擇附加檔案預計要做到選了幾個檔案就必須要全部填入ListBox中,若是要取消則是選取ListBox的內容後按下Delete按鈕,這樣子可以方便使用這套M
10、ail Sender來寄送附帶檔案。 有關寄送信件的這段程式碼中,會先判斷是不是有些必要的值沒有被輸入,如果有缺少某些值,程式會自動判斷出缺少哪些值,並要求重新輸入如果輸入的值都沒有缺少,就會馬上進入寄信的程式。在寄信的一開始我們要先Connect上Mail Server,連上了之後,我們才繼續將一些資訊寫入NMSMTP中,等這些事情都做完了,我們就可以執行Send這個函式將這封Mail利用所指定的Server寄出。,15,23-3. 寄信程式,範例23-1:主要程式碼(main.cpp) 傳送郵件部分程式碼,16,23-3. 寄信程式,範例23-1:主要程式碼(main.cpp) 傳送郵件部
11、分程式碼,17,23-3. 寄信程式,範例23-1:主要程式碼(main.cpp) 傳送郵件部分程式碼,18,23-3. 寄信程式,範例23-1:主要程式碼(main.cpp) 傳送郵件部分程式碼,19,23-3. 寄信程式,範例23-1:主要程式碼(main.cpp) 新增郵件附件檔部分程式碼,20,23-3. 寄信程式,範例23-1:主要程式碼(main.cpp) 刪除郵件附件檔部分程式碼,21,23-3. 寄信程式,範例23-1:執行結果,一個簡單的寄信程式就經完成了,簡單吧!不過,不知道大家有沒有發現一些事情?如果Server突然連不上去怎麼辦?如果Server主機的位址被亂填怎麼辦?
12、如果附加檔名不存在怎麼辦?如果。有著太多不確定的問題在這個程式中了,那我們該如何解決呢?我們將在範例23-2中告訴各位這些不確定性的問題該如何解決。範例23-2主要是由範例23-1改過來的,根據範例23-1中的一些小缺點作一些改進。,22,23-3. 寄信程式,範例23-2:寄信程式加強版的開發 範例說明 範例23-2主要是修正了範例23-1的一些缺點,包括了連線上的問題,附帶檔的問題,以及一些我們必須要自己handle的問題我們都在範例23-2中一併解決。 在這個範例中最大的差別就是在多了Connect和Disconnect這兩個按鈕。為什麼要多這兩個呢?最主要是因為如果你還沒有確定可以跟S
13、erver連結上就將mail送出去,這時就會發生例外事件,如果我們在還沒Connect之前不讓使用者可以按下Send鈕就可以保證不會發生Connect Fail的例外事件發生。,23,23-3. 寄信程式,範例23-2:主要程式碼(main.cpp) 可以用來檢查輸入資料的方法很多,包括用例外事件的寫法或是利用一堆If來做判斷都可以,在這個範例中,我們使用最基本的If來檢查資料的正確性。 在這個範例中除了用If來判斷資料的正確性外,我們還使用了BCB所提供的一些函式來判斷連線的狀況。 在這份投影片中,我們只列出使用BCB函式來判斷連線的程式碼。想要了解範例完整的程式碼,請參考書上的程式碼。,2
14、4,23-3. 寄信程式,範例23-2:主要程式碼(main.cpp) 與Server連線部分程式碼,25,23-3. 寄信程式,範例23-2:主要程式碼(main.cpp) 與Server連線部分程式碼,26,23-3. 寄信程式,範例23-2:主要程式碼(main.cpp) 與Server連線部分程式碼,27,23-3. 寄信程式,範例23-2:主要程式碼(main.cpp) 與Server斷線部分程式碼,28,23-3. 寄信程式,範例23-2:主要程式碼(main.cpp) Connection Failed 時所呼叫的Function,29,23-3. 寄信程式,範例23-2:寄信程
15、式加強版的開發 執行結果,30,23-3. 寄信程式,如果各位有發現的話,在範例23-2應該會看到多了NMSMTP1ConnectionFailed這個函式,這個就是當ConnectionFailed的時候會觸發的事件程序 在NMSMTP中有關各種Failed所引發的事件還有 OnAttatchmentNotFound、OnAuthenticationFailed、OnConnectionFailed、OnFailure、OnHeaderIncomplete、OnInvalidHost、OnRecipienNotFound等事件 這些事件的用法跟OnConnectionFailed的用法都差不
16、多,大家可以嘗試著使用看看,一套完善的發信軟體必須要能handle住上面所列的那些Exception才不至於一天到晚出問題,也希望讀者可以透過範例29-2繼續完成還沒Implement的這些Failed相關的Event,讓這個寄信程式可以更完美。,31,23-4. HTTP抓網頁程式,上一節我們舉了Mail Client當作一個範例,這邊我們再舉一個利用HTTP Protocol來抓取網頁資料的小程式。這個程式我們將放在範例23-3中。 這個程式最主要是抓取我們所指定的網頁的資料,傳回值為這個網頁的Header以及Body。 這個程式設計上相當的簡單,只用了一個NMHTTP以及兩個SaveDi
17、alog為隱藏的VCL元件,其餘的就是PageControl、Panel、Edit、Memo、以及BitBtn等基本的元件。,32,23-4. HTTP抓網頁程式,範例23-3:網頁抓取範例 範例說明 在該範例中,我們將利用NMHTTP這個元件抓取網路上任何一個網頁的Header以及Body這兩個重要資料。底下我們將一步一步告訴讀者我們該如何完成這個範例。 Step 1: 開新專案,並且將該使用到的VCL元件放到Form上面 Step 2: 設定相關屬性 SaveDialog NMHTTP Step 3: 程式碼的撰寫,33,23-4. HTTP抓網頁程式,範例23-3:主要程式碼(main.
18、cpp),34,23-4. HTTP抓網頁程式,範例23-3:網頁抓取範例 執行結果,35,23-5. 一些Client端的小程式,在這一小節我們將寫一些簡單的Client/Server程式,全部是利用FastNet內的元件所完成的。 DateTime、Time、Message、Echo、NNTP、Stream、POP3、URL、MIME、UUDecode、Finger等。現在我們就利用範例23-4、23-5、23-6、23-7、23-8、23-9、23-10、23-11、以及23-12解釋各個元件的使用方法。,36,23-5. 一些Client端的小程式,範例23-4:DayTime / T
19、ime範例 範例說明 DayTime、以及Time這兩種服務主要就是傳回目前Server上的時間以及日期。 我們寫的這個程式就是去Server上要回這些資料並且顯示出來。在這個介面中,我們將DayTime以及Time兩種不同的服務分開寫,這樣可以讓使用者更容易分辨這兩種VCL元件的用法。,37,23-5. 一些Client端的小程式,範例23-4:主要程式碼(main.cpp),38,23-5. 一些Client端的小程式,範例23-4:主要程式碼(main.cpp),39,23-5. 一些Client端的小程式,範例23-4:DayTime / Time範例 執行結果,40,23-5. 一些
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 十三 InterNet 网路 程式 设计
链接地址:https://www.31doc.com/p-2551173.html