书签 分享 收藏 举报 版权申诉 / 90
上传文档赚钱

类型最新二十三章InterNet网路程式设计课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4968246
  • 上传时间:2023-01-29
  • 格式:PPT
  • 页数:90
  • 大小:1.06MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《最新二十三章InterNet网路程式设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    最新 十三 InterNet 网路 程式 设计 课件
    资源描述:

    1、进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着“怎么这么热怎么这么热”,于是三,于是三五成群,聚在大树下,或站着,或随即坐在石头上,手持那把扇子,边唠嗑五成群,聚在大树下,或站着

    2、,或随即坐在石头上,手持那把扇子,边唠嗑边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到“强子,别跑强子,别跑了,快来我给你扇扇了,快来我给你扇扇”。孩子们才不听这一套,跑个没完,直到累气喘吁吁,。孩子们才不听这一套,跑个没完,直到累气喘吁吁,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,“你你看热的,跑什么?看热的,跑什么?”此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲的味道!蒲扇是中国传统工艺品,在我国

    3、已有三千年多年的历史。取材的味道!蒲扇是中国传统工艺品,在我国已有三千年多年的历史。取材于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过了我们的扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过

    4、了我们的半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧道,袅道,袅2大綱 23-1.Socket觀念 23-2.哪些VCL元件可以使用 23-3.寄信程式 23-4.HTTP 抓網頁程式 23-5.一些Client端的小程式 23-6.聊天室 23-7.CGI程式設計 本章習題923-2.哪些VCL元件可以使用 FastNet中比較常用到的元件 NMStrm 傳送資料流 NMStrmServ 接收NMStrm送過來的資料流 NMPOP3 使用POP3通訊協定來接收或是傳送信件 NMSMTP 使用SMTP通訊協

    5、定來傳送郵件 NMTime 可以傳回Server端的時間 1023-2.哪些VCL元件可以使用 FastNet中比較常用到的元件 NMUDP 傳輸的通訊協定改用UDP Protocol NMURL 將URL編碼/解碼成一般的文字字串 NMUUProcess 使用MIME或是UU En/Decode來編碼/解碼 NMFinger 獲得Server端使用者的訊息 1123-3.寄信程式 在這一小節我們將寫一個小小的寄信程式,讓使用者可以直接在電腦上寄出信件。這個程式可以說是相當的簡單,看起來似乎不太像是網路程式,其實最主要是因為這些底層的程式碼BCB都幫我們包裝好了,所以才不需要寫太多程式碼。這個

    6、程式我們將會放在範例23-1中。1223-3.寄信程式 範例23-1:寄信程式的開發 範例說明 範例23-1主要是希望可以利用BCB強大又好用的VCL元件快速的開發出一個寄信程式出來,在這個範例中,我們主要使用了FastNet中的NMSMTP這個VCL元件來寄信。整個開發過程我們完全不需要知道任何跟網路相關的知識,我們只需要知道NMSMTP中的各個屬性該填入什麼樣的值即可!範例23-1的設計畫面 用到LabeledEdit、Memo、ListBox、BitBtn、StatusBar、NMSMTP、以及OpenDialog這七種VCL元件1323-3.寄信程式 範例23-1:寄信程式的開發 設定

    7、OpenDialog 將OpenDialog中的ofAllowMultiSelect這個屬性的值改成true,讓使用者在選擇附加檔案的時候可以多重選擇。也將Filter的值設定成All File|*,也就是預設讀取所有的檔案。1423-3.寄信程式 範例23-1:寄信程式的開發 功能的需求 選擇附加檔案預計要做到選了幾個檔案就必須要全部填入ListBox中,若是要取消則是選取ListBox的內容後按下Delete按鈕,這樣子可以方便使用這套Mail Sender來寄送附帶檔案。有關寄送信件的這段程式碼中,會先判斷是不是有些必要的值沒有被輸入,如果有缺少某些值,程式會自動判斷出缺少哪些值,並要求

    8、重新輸入如果輸入的值都沒有缺少,就會馬上進入寄信的程式。在寄信的一開始我們要先Connect上Mail Server,連上了之後,我們才繼續將一些資訊寫入NMSMTP中,等這些事情都做完了,我們就可以執行Send這個函式將這封Mail利用所指定的Server寄出。1523-3.寄信程式 範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼/-/傳送郵件/-void _fastcall TForm1:BitBtn1Click(TObject*Sender)/宣告一個AnsiString用來放置要給使用者看的錯誤訊息 AnsiString msg;/判斷是不是有必要的欄位沒有填寫 if(

    9、LabeledEdit1-Text!=“”)&(LabeledEdit2-Text!=)&(LabeledEdit3-Text!=)&(LabeledEdit4-Text!=)&(LabeledEdit5-Text!=)/將各個欄位的資料全部寫入變數中,這樣比較方便在程式中使用 AnsiString Server=LabeledEdit1-Text;int Port=LabeledEdit2-Text.ToInt();AnsiString User=LabeledEdit3-Text;AnsiString Subject=LabeledEdit4-Text;AnsiString To=Labe

    10、ledEdit5-Text;1623-3.寄信程式 範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼 /將Server Side相關屬性設定好 NMSMTP1-Host=Server;/填入 E-mail Server 的位址 NMSMTP1-Port=Port;/填入E-mail Server 的 Port,一般都是使用25 NMSMTP1-UserID=User;/填入User Name NMSMTP1-Connect();/與Server連線 /將各個資料填入NMSMTP的PostMessage中 NMSMTP1-PostMessage-FromAddress=User+S

    11、erver;/填入寄信者的e-mail address NMSMTP1-PostMessage-FromName=User;/填入寄件者的姓名 NMSMTP1-PostMessage-Subject=Subject;/填入信件標題 NMSMTP1-PostMessage-ToAddress-Add(To);/填入收信人的E-mail Address /填入副本收件者的E-mail Address NMSMTP1-PostMessage-ToCarbonCopy-Add(LabeledEdit6-Text);/填入密件副本收件者的E-mail Address NMSMTP1-PostMessag

    12、e-ToBlindCarbonCopy-Add(LabeledEdit7-Text);NMSMTP1-PostMessage-Body-Assign(Memo1-Lines);/填入信件內容 NMSMTP1-SendMail();/將信送出1723-3.寄信程式 範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼 /將信送出後.把輸入框內的資料清空 LabeledEdit1-Text=;LabeledEdit2-Text=25;LabeledEdit3-Text=;LabeledEdit4-Text=;LabeledEdit5-Text=;LabeledEdit6-Text=;La

    13、beledEdit7-Text=;ListBox1-Clear();Memo1-Clear();else /如果在檢查的時後發現有重要的資訊沒有填寫,就會依照沒有填寫的項目一一警告使用者要填入 /在這邊會警告的是第一個沒填入的,並不是只要沒填就出現警告 /如果要做到只要填寫錯誤就出現錯誤訊息,只要把所有的else if拿掉改用if即可 if(LabeledEdit1-Text=)msg=Please inpit the server host!n;MessageBox(GetActiveWindow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledE

    14、dit1-SetFocus();else if(LabeledEdit2-Text=)msg=Please inpit the server port!n;MessageBox(GetActiveWindow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledEdit2-SetFocus();1823-3.寄信程式 範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼 else if(LabeledEdit3-Text=)msg=Please input the user id!n;MessageBox(GetActiveWindow(),m

    15、sg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledEdit3-SetFocus();else if(LabeledEdit4-Text=)msg=Please input the mail subject!n;MessageBox(GetActiveWindow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledEdit4-SetFocus();else if(LabeledEdit5-Text=)msg=Please input the mail receiver!n;MessageBox(GetActiveWin

    16、dow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledEdit5-SetFocus();1923-3.寄信程式 範例23-1:主要程式碼(main.cpp)新增郵件附件檔部分程式碼/-/新增郵件附件檔/-void _fastcall TForm1:BitBtn2Click(TObject*Sender)if(OpenDialog1-Execute()/將我們選取的郵件附件檔的完整檔名加到PostMessage中 NMSMTP1-PostMessage-Attachments-AddStrings(OpenDialog1-Files);/將我們選取的

    17、檔案的檔名加到List中 for(int i=0;i Files-Count;i+)ListBox1-Items-Add(ExtractFileName(OpenDialog1-Files-Stringsi);2023-3.寄信程式 範例23-1:主要程式碼(main.cpp)刪除郵件附件檔部分程式碼/-/刪除郵件附件檔/-void _fastcall TForm1:BitBtn3Click(TObject*Sender)if(ListBox1-SelectedListBox1-ItemIndex)/將選取的郵件附件檔移除 /在這邊除了要從PostMessage中移除外.也要從ListBox中

    18、移除 /移除在這邊都是使用Index的方式./因為我們在新增附件檔的時候.都是採用append的方式 /所以不管是在PostMessage或是在ListBox中的Index都是一樣的 /並不會有順序亂掉的問題.所以才可以使用這樣的code./如果要將程式寫的嚴謹一點.加入check file name的判斷即可 NMSMTP1-PostMessage-Attachments-Delete(ListBox1-ItemIndex);ListBox1-Items-Delete(ListBox1-ItemIndex);2123-3.寄信程式 範例23-1:執行結果一個簡單的寄信程式就經完成了,簡單吧!

    19、不過,不知道大家有沒有發現一些事情?如果Server突然連不上去怎麼辦?如果Server主機的位址被亂填怎麼辦?如果附加檔名不存在怎麼辦?如果。有著太多不確定的問題在這個程式中了,那我們該如何解決呢?我們將在範例23-2中告訴各位這些不確定性的問題該如何解決。範例23-2主要是由範例23-1改過來的,根據範例23-1中的一些小缺點作一些改進。2223-3.寄信程式 範例23-2:寄信程式加強版的開發 範例說明 範例23-2主要是修正了範例23-1的一些缺點,包括了連線上的問題,附帶檔的問題,以及一些我們必須要自己handle的問題我們都在範例23-2中一併解決。在這個範例中最大的差別就是在多了

    20、Connect和Disconnect這兩個按鈕。為什麼要多這兩個呢?最主要是因為如果你還沒有確定可以跟Server連結上就將mail送出去,這時就會發生例外事件,如果我們在還沒Connect之前不讓使用者可以按下Send鈕就可以保證不會發生Connect Fail的例外事件發生。2323-3.寄信程式 範例23-2:主要程式碼(main.cpp)可以用來檢查輸入資料的方法很多,包括用例外事件的寫法或是利用一堆If來做判斷都可以,在這個範例中,我們使用最基本的If來檢查資料的正確性。在這個範例中除了用If來判斷資料的正確性外,我們還使用了BCB所提供的一些函式來判斷連線的狀況。在這份投影片中,我

    21、們只列出使用BCB函式來判斷連線的程式碼。想要了解範例完整的程式碼,請參考書上的程式碼。2423-3.寄信程式 範例23-2:主要程式碼(main.cpp)與Server連線部分程式碼/-/與Server連線/-void _fastcall TForm1:BitBtn4Click(TObject*Sender)/宣告一個AnsiString用來放置要給使用者看的錯誤訊息 AnsiString msg;/判斷是不是有必要的欄位沒有填寫 if(LabeledEdit1-Text!=)&(LabeledEdit2-Text!=)&(LabeledEdit3-Text!=)/將各個欄位的資料全部寫入變

    22、數中,這樣比較方便在程式中使用 AnsiString Server=LabeledEdit1-Text;int Port=LabeledEdit2-Text.ToInt();AnsiString User=LabeledEdit3-Text;/將Server Side相關屬性設定好 NMSMTP1-Host=Server;/填入 E-mail Server 的位址 NMSMTP1-Port=Port;/填入E-mail Server 的 Port,一般都是使用25 NMSMTP1-UserID=User;/填入User Name2523-3.寄信程式 範例23-2:主要程式碼(main.cpp

    23、)與Server連線部分程式碼 /一切設定都確認有輸入之後.改變以下這些屬性 BitBtn1-Enabled=true;BitBtn2-Enabled=true;BitBtn3-Enabled=true;BitBtn4-Enabled=false;BitBtn5-Enabled=true;LabeledEdit1-ReadOnly=true;LabeledEdit2-ReadOnly=true;LabeledEdit3-ReadOnly=true;/與Server連線 NMSMTP1-Connect();else /如果在檢查的時後發現有重要的資訊沒有填寫,就會依照沒有填寫的項目一一警告使用者

    24、要填入 /在這邊會警告的是第一個沒填入的並不是只要沒填就出現警告 /如果要做到只要填寫錯誤就出現錯誤訊息,只要把所有的else if拿掉改用if即可 if(LabeledEdit1-Text=)msg=Please inpit the server host!n;MessageBox(GetActiveWindow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledEdit1-SetFocus();2623-3.寄信程式 範例23-2:主要程式碼(main.cpp)與Server連線部分程式碼 else if(LabeledEdit2-Text=)ms

    25、g=Please inpit the server port!n;MessageBox(GetActiveWindow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledEdit2-SetFocus();else if(LabeledEdit3-Text=)msg=Please input the user id!n;MessageBox(GetActiveWindow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);LabeledEdit3-SetFocus();2723-3.寄信程式 範例23-2:主要程式碼(main

    26、.cpp)與Server斷線部分程式碼/-/與Server斷線/-void _fastcall TForm1:BitBtn5Click(TObject*Sender)NMSMTP1-Disconnect();/斷線之後將所有的屬性恢復預設值,將該清乾淨的輸入框清乾淨 LabeledEdit1-Text=;LabeledEdit2-Text=25;LabeledEdit3-Text=;LabeledEdit4-Text=;LabeledEdit5-Text=;LabeledEdit6-Text=;LabeledEdit7-Text=;Memo1-Clear();ListBox1-Clear();

    27、/將一些改成唯讀的屬性改回來 LabeledEdit1-ReadOnly=false;LabeledEdit2-ReadOnly=false;LabeledEdit3-ReadOnly=false;/重新設定按鈕的Enable屬性 BitBtn1-Enabled=false;BitBtn2-Enabled=false;BitBtn3-Enabled=false;BitBtn4-Enabled=true;BitBtn5-Enabled=false;2823-3.寄信程式 範例23-2:主要程式碼(main.cpp)Connection Failed 時所呼叫的Function/-/Connect

    28、ion Failed 時所呼叫的Function/-void _fastcall TForm1:NMSMTP1ConnectionFailed(TObject*Sender)/宣告一個AnsiString用來放置要給使用者看的錯誤訊息 AnsiString msg;/跳出一個訊息告訴使用者連線失敗 msg=Connection Failed!n;MessageBox(GetActiveWindow(),msg.c_str(),NULL,MB_OK|MB_ICONERROR);/連線錯誤之後將所有的屬性恢復預設值,將該清乾淨的輸入框清乾淨 LabeledEdit1-Text=;LabeledEd

    29、it2-Text=25;LabeledEdit3-Text=;LabeledEdit4-Text=;LabeledEdit5-Text=“;LabeledEdit6-Text=;LabeledEdit7-Text=;Memo1-Clear();ListBox1-Clear();/將一些改成唯讀的屬性改回來 LabeledEdit1-ReadOnly=false;LabeledEdit2-ReadOnly=false;LabeledEdit3-ReadOnly=false;/重新設定按鈕的Enable屬性 BitBtn1-Enabled=false;BitBtn2-Enabled=false;B

    30、itBtn3-Enabled=false;BitBtn4-Enabled=true;BitBtn5-Enabled=false;2923-3.寄信程式 範例23-2:寄信程式加強版的開發 執行結果3023-3.寄信程式 如果各位有發現的話,在範例23-2應該會看到多了NMSMTP1ConnectionFailed這個函式,這個就是當ConnectionFailed的時候會觸發的事件程序 在NMSMTP中有關各種Failed所引發的事件還有 OnAttatchmentNotFound、OnAuthenticationFailed、OnConnectionFailed、OnFailure、OnHe

    31、aderIncomplete、OnInvalidHost、OnRecipienNotFound等事件 這些事件的用法跟OnConnectionFailed的用法都差不多,大家可以嘗試著使用看看,一套完善的發信軟體必須要能handle住上面所列的那些Exception才不至於一天到晚出問題,也希望讀者可以透過範例29-2繼續完成還沒Implement的這些Failed相關的Event,讓這個寄信程式可以更完美。3123-4.HTTP抓網頁程式 上一節我們舉了Mail Client當作一個範例,這邊我們再舉一個利用HTTP Protocol來抓取網頁資料的小程式。這個程式我們將放在範例23-3中。

    32、這個程式最主要是抓取我們所指定的網頁的資料,傳回值為這個網頁的Header以及Body。這個程式設計上相當的簡單,只用了一個NMHTTP以及兩個SaveDialog為隱藏的VCL元件,其餘的就是PageControl、Panel、Edit、Memo、以及BitBtn等基本的元件。3223-4.HTTP抓網頁程式 範例23-3:網頁抓取範例 範例說明 在該範例中,我們將利用NMHTTP這個元件抓取網路上任何一個網頁的Header以及Body這兩個重要資料。底下我們將一步一步告訴讀者我們該如何完成這個範例。Step 1:開新專案,並且將該使用到的VCL元件放到Form上面 Step 2:設定相關屬

    33、性 SaveDialog NMHTTP Step 3:程式碼的撰寫 3323-4.HTTP抓網頁程式 範例23-3:主要程式碼(main.cpp)void _fastcall TForm1:BitBtn1Click(TObject*Sender)if(LabeledEdit1-Text!=)NMHTTP1-Get(LabeledEdit1-Text);Memo1-Lines-Add(NMHTTP1-Header);Memo2-Lines-Add(NMHTTP1-Body);/-void _fastcall TForm1:BitBtn2Click(TObject*Sender)if(SaveDi

    34、alog1-Execute()if(!FileExists(SaveDialog1-FileName)Memo1-Lines-SaveToFile(SaveDialog1-FileName);else ShowMessage(檔案已存在!n);/-void _fastcall TForm1:BitBtn3Click(TObject*Sender)if(SaveDialog2-Execute()if(!FileExists(SaveDialog2-FileName)Memo2-Lines-SaveToFile(SaveDialog2-FileName);else ShowMessage(檔案已存

    35、在!n);3423-4.HTTP抓網頁程式 範例23-3:網頁抓取範例 執行結果3523-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解釋各個元件的使用方法。3623-5.一些Client端的小程式 範例23-4:DayTime/Time範例 範例說明

    36、DayTime、以及Time這兩種服務主要就是傳回目前Server上的時間以及日期。我們寫的這個程式就是去Server上要回這些資料並且顯示出來。在這個介面中,我們將DayTime以及Time兩種不同的服務分開寫,這樣可以讓使用者更容易分辨這兩種VCL元件的用法。3723-5.一些Client端的小程式 範例23-4:主要程式碼(main.cpp)void _fastcall TForm1:BitBtn1Click(TObject*Sender)/使用NMDayTime抓取Server的Date and Time,如果Server Host和Port皆有輸入才連線去抓取資料 if(Labele

    37、dEdit1-Text!=)&(LabeledEdit2-Text!=)/將相關的值設定到變數.方便使用 AnsiString Server=LabeledEdit1-Text;int Port=LabeledEdit2-Text.ToInt();/指定Server Host以及Server Port NMDayTime1-Host=Server;NMDayTime1-Port=Port;/抓取Server端的DateTime LabeledEdit3-Text=NMDayTime1-DayTimeStr;/-void _fastcall TForm1:NMDayTime1Connection

    38、Failed(TObject*Sender)/當NMDayTime連線錯誤時發生的事件 MessageBox(GetActiveWindow(),連線失敗!n,NULL,MB_OK|MB_ICONERROR);/-void _fastcall TForm1:NMDayTime1InvalidHost(bool&Handled)/當NMDayTime發現輸入的Server Host不合法所發生的事件 MessageBox(GetActiveWindow(),不合法的位址!n,NULL,MB_OK|MB_ICONERROR);3823-5.一些Client端的小程式 範例23-4:主要程式碼(ma

    39、in.cpp)void _fastcall TForm1:BitBtn2Click(TObject*Sender)/使用NMTime抓取Server的Time,如果Server Host和Port皆有輸入才連線去抓取資料 if(LabeledEdit4-Text!=)&(LabeledEdit6-Text!=)/將相關的值設定到變數.方便使用 AnsiString Server=LabeledEdit4-Text;int Port=LabeledEdit6-Text.ToInt();/指定Server Host以及Server Port NMTime1-Host=Server;NMTime1-

    40、Port=Port;/抓取Server端的Time LabeledEdit5-Text=NMTime1-TimeStr;/-void _fastcall TForm1:NMTime1ConnectionFailed(TObject*Sender)/當NMTime連線錯誤時發生的事件 MessageBox(GetActiveWindow(),連線失敗!n,NULL,MB_OK|MB_ICONERROR);/-void _fastcall TForm1:NMTime1InvalidHost(bool&Handled)/當NMTime發現輸入的Server Host不合法所發生的事件 Message

    41、Box(GetActiveWindow(),不合法的位址!n,NULL,MB_OK|MB_ICONERROR);3923-5.一些Client端的小程式 範例23-4:DayTime/Time範例 執行結果4023-5.一些Client端的小程式 範例23-5:Message Server/Client範例 範例說明 Message這部分的程式分成Server端以及Client端,使用6711這個Port來傳輸Message。這個程式最主要的功能就是Server端可以接收來自Client端的資料。4123-5.一些Client端的小程式 範例23-5:主要程式碼(main.cpp)Server

    42、 Side Codevoid _fastcall TForm1:BitBtn1Click(TObject*Sender)/清除Message Log Memo1-Clear();/-void _fastcall TForm1:NMMSGServ1MSG(TComponent*Sender,const AnsiString sFrom,const AnsiString sMsg)/將收到的訊息放在msg這個AnsiString中 AnsiString msg=sFrom+=+sMsg;/停頓一些時間.讓程式處理Socket Sleep(100);/將收到的Log Append到Memo上 Mem

    43、o1-Lines-Add(msg);4223-5.一些Client端的小程式 範例23-5:主要程式碼(main.cpp)Client Side Codevoid _fastcall TForm1:BitBtn2Click(TObject*Sender)/檢查是否三個Edit全部都填入資料了 if(LabeledEdit1-Text!=)&(LabeledEdit2-Text!=)&(LabeledEdit3-Text!=)NMMsg1-Host=LabeledEdit1-Text;/設定Server Host NMMsg1-FromName=LabeledEdit2-Text;/設定Send

    44、ers Name NMMsg1-PostIt(LabeledEdit3-Text);/將要送出的Message Post出去給Server LabeledEdit3-Text=;/將送出的內容從LabeledEdit中清除 /-void _fastcall TForm1:LabeledEdit3KeyPress(TObject*Sender,char&Key)/功能跟BitBtn2一樣,不過這個事件是用來抓取Enter這個鍵 /如果我們在LabeledEdit中按下Enter,程式就會自動幫我們把訊息送出去 if(Key=13)if(LabeledEdit1-Text!=)&(LabeledE

    45、dit2-Text!=)&(LabeledEdit3-Text!=)NMMsg1-Host=LabeledEdit1-Text;NMMsg1-FromName=LabeledEdit2-Text;NMMsg1-PostIt(LabeledEdit3-Text);LabeledEdit3-Text=;4323-5.一些Client端的小程式 範例23-5:Message Server/Client範例 執行結果4423-5.一些Client端的小程式 範例23-6:Echo Client範例 範例說明 Echo Server主要的用途就是將Client發給Server的訊息傳送回來。在這個程式中

    46、,我們除了將訊息傳送回來外,我們也加入了時間的計算,看看整個傳送過程中需要多少時間。4523-5.一些Client端的小程式 範例23-6:主要程式碼(main.cpp)void _fastcall TForm1:BitBtn1Click(TObject*Sender)/該輸入的資訊都有輸入就與Server建立連線 if(LabeledEdit1-Text!=)&(LabeledEdit2-Text!=)/設定屬性 NMEcho1-Host=LabeledEdit1-Text;NMEcho1-Port=LabeledEdit2-Text.ToInt();NMEcho1-Connect();/與

    47、Server離線 /-void _fastcall TForm1:BitBtn2Click(TObject*Sender)NMEcho1-Disconnect();/與Server切斷連線/-void _fastcall TForm1:BitBtn3Click(TObject*Sender)/傳送LabeledEdit3的Text至Echo Server,將Echo送回的字串放到LabeledEdit4的Text中 /並且將整個Echo所花的時間紀錄到LabeledEdit5的Text中 if(LabeledEdit3-Text!=)LabeledEdit4-Text=NMEcho1-Echo

    48、(LabeledEdit3-Text);LabeledEdit5-Text=FloatToStr(NMEcho1-ElapsedTime)+milliseconds;4623-5.一些Client端的小程式 範例23-6:主要程式碼(main.cpp)void _fastcall TForm1:LabeledEdit3KeyPress(TObject*Sender,char&Key)/與BitBtn3功能一樣.只是在這邊不需要按下按鈕 /只要在LabeledEdit3中輸入Enter就馬上送出 if(Key=13)if(LabeledEdit3-Text!=)LabeledEdit4-Text

    49、=NMEcho1-Echo(LabeledEdit3-Text);LabeledEdit5-Text=FloatToStr(NMEcho1-ElapsedTime)+milliseconds;/-void _fastcall TForm1:NMEcho1Connect(TObject*Sender)/當連線的時候要做的屬性設定 BitBtn1-Enabled=false;BitBtn2-Enabled=true;BitBtn3-Enabled=true;/-void _fastcall TForm1:NMEcho1Disconnect(TObject*Sender)/當斷線的時候要做的屬性設定

    50、 BitBtn1-Enabled=true;BitBtn2-Enabled=false;BitBtn3-Enabled=false;4723-5.一些Client端的小程式 範例23-6:Echo Client範例 執行結果4823-5.一些Client端的小程式 範例23-7:NNTP Client範例 範例說明 NNTP就是我們一般常說的新聞群組或是News Server。在這個程式中我們只先寫出與主機連線以及取得Group名稱,並且抓取Group文章的數量資訊。至於列出Group內的文章的標題,還有閱讀文章、發表文章等等的功能,只需要稍微看一下NMNNTP中的各種Event所代表的意義,

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:最新二十三章InterNet网路程式设计课件.ppt
    链接地址:https://www.163wenku.com/p-4968246.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库