第二十三章--InterNet网络程序设计-C++-Builder-课件-简体中文版.ppt

上传人(卖家):晟晟文业 文档编号:4959611 上传时间:2023-01-28 格式:PPT 页数:89 大小:571KB
下载 相关 举报
第二十三章--InterNet网络程序设计-C++-Builder-课件-简体中文版.ppt_第1页
第1页 / 共89页
第二十三章--InterNet网络程序设计-C++-Builder-课件-简体中文版.ppt_第2页
第2页 / 共89页
第二十三章--InterNet网络程序设计-C++-Builder-课件-简体中文版.ppt_第3页
第3页 / 共89页
第二十三章--InterNet网络程序设计-C++-Builder-课件-简体中文版.ppt_第4页
第4页 / 共89页
第二十三章--InterNet网络程序设计-C++-Builder-课件-简体中文版.ppt_第5页
第5页 / 共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程序设计 本章习题323-1.Socket观念 Socket是一种API,他介于网络应用程序跟通讯协议之间,他就像是一般的程序中提供的函式一样,只不过Socket是专用于网络程序之中。所以说,Socket也

2、属于System call,让使用者可以在程序中直接呼叫,就好像在C/C+语言中你要输入就需要使用scanf、cin或是输出时会用到printf、cout等等。虽然说使用Socket就像使用一般的函式一样简单,但是还是必须要具备一些基本的通讯协议概念,不然什么时候要呼叫socket()、bind()等函式就一头雾水了,只是我们只需要了解,不需要知道怎么写出这些API。423-1.Socket观念 Socket最早是出现在BSD系列的Unix主机中,所以现在大家在学习Socket的过程中,最常听到的就是Berkeley Socket。当然现在我们是在Windows上写Socket的程序,所以我们

3、使用的Socket就被称做Win Socket。会叫做Berkeley的原因是BSD中的B就是Berkeley。Win Socket跟Berkeley Socket有什么不同?除了操作系统(开发环境)的不同外,其余皆大同小异,因为大家通常都会遵循着Berkeley Socket的标准来开发整个Socket的API。523-1.Socket观念 Socket的定义 网络联机的两端之间,为了要互相联系以及沟通所用的接口就称做Socket。这两端无论是不是在LAN内都可以。在Unix下要写网络程序真的需要对整个Socket以及通讯协议有一定的熟悉度,但是现在BCB打破了如此的迷失。BCB内部提供了S

4、erver/Client Socket供Server端以及Client端使用,我们不需要自己慢慢写程序代码来建立联机,你只要设定好Server/Client Socket的一些属性,BCB就会帮你完成一堆琐碎的事情。我们所要考虑的只剩下该如何设计整个网络程序的主体。623-2.哪些VCL组件可以使用 在BCB6中撰写有关网络的程序,会有许多的VCL组件可供我们使用。例如Webservices、InternetExpress、Internet、WebSnap、FastNet、Indy Clients、以及Indy Servers等等,都是发展网络相关程序的组件。在这一章里,我们主要要介绍的组件都

5、分布在Internet和FastNet这两个Page中,包括Client/Server Socket或是其它已经包装好的VCL组件都可以找的到。723-2.哪些VCL组件可以使用 InterNet中比较常用到的组件 ClientSocket Client端的TCP Socket API。可以利用这个组件让我们使用TCP通讯协议开发Client端的网络应用程序 ServerSocket Server端的TCP Socket API。可以利用这个组件让我们使用TCP通讯协议开发Server端的网络应用程序 FastNet中比较常用到的组件 NMDayTime 可以传回Server端的日期以及时间

6、NMMsg 传送一般的文字讯息823-2.哪些VCL组件可以使用 FastNet中比较常用到的组件 NMMSGServ 接收一般的文字讯息 NMEcho 传送或是接收讯息,和NMMsg以及NMMSGServ有部分相似 NMFTP 设计FTP Client端的VCL组件,主要用来档案传输 NMHTTP 利用HTTP通讯协议取得HTML的文件 NMNNTP 从新闻服务器接收文章,或是传送文章到新闻服务器923-2.哪些VCL组件可以使用 FastNet中比较常用到的组件 NMStrm 传送数据流 NMStrmServ 接收NMStrm送过来的数据流 NMPOP3 使用POP3通讯协议来接收或是传送

7、信件 NMSMTP 使用SMTP通讯协议来传送邮件 NMTime 可以传回Server端的时间1023-2.哪些VCL组件可以使用 FastNet中比较常用到的组件 NMUDP 传输的通讯协议改用UDP Protocol NMURL 将URL编码/译码成一般的文字字符串 NMUUProcess 使用MIME或是UU En/Decode来编码/译码 NMFinger 获得Server端使用者的讯息1123-3.寄信程序 在这一小节我们将写一个小小的寄信程序,让使用者可以直接在计算机上寄出信件。这个程序可以说是相当的简单,看起来似乎不太像是网络程序,其实最主要是因为这些底层的程序代码BCB都帮我们

8、包装好了,所以才不需要写太多程序代码。这个程序我们将会放在范例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.寄

9、信程序 范例23-1:寄信程序的开发 设定OpenDialog 将OpenDialog中的ofAllowMultiSelect这个属性的值改成true,让使用者在选择附加档案的时候可以多重选择。也将Filter的值设定成All File|*,也就是预设读取所有的档案。1423-3.寄信程序 范例23-1:寄信程序的开发 功能的需求 选择附加档案预计要做到选了几个档案就必须要全部填入ListBox中,若是要取消则是选取ListBox的内容后按下Delete按钮,这样子可以方便使用这套Mail Sender来寄送附带档案。有关寄送信件的这段程序代码中,会先判断是不是有些必要的值没有被输入,如果有缺

10、少某些值,程序会自动判断出缺少哪些值,并要求重新输入如果输入的值都没有缺少,就会马上进入寄信的程序。在寄信的一开始我们要先Connect上Mail Server,连上了之后,我们才继续将一些信息写入NMSMTP中,等这些事情都做完了,我们就可以执行Send这个函式将这封Mail利用所指定的Server寄出。1523-3.寄信程序 范例23-1:主要程序代码(main.cpp)传送邮件部分程序代码/-/传送邮件/-void _fastcall TForm1:BitBtn1Click(TObject*Sender)/宣告一个AnsiString用来放置要给使用者看的错误讯息AnsiString m

11、sg;/判断是不是有必要的字段没有填写if(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-Te

12、xt;AnsiString To=LabeledEdit5-Text;1623-3.寄信程序 范例23-1:主要程序代码(main.cpp)传送邮件部分程序代码 /将Server Side相关属性设定好NMSMTP1-Host=Server;/填入E-mail Server的地址NMSMTP1-Port=Port;/填入E-mail Server的Port,一般都是使用25NMSMTP1-UserID=User;/填入User NameNMSMTP1-Connect();/与Server联机/将各个资料填入NMSMTP的PostMessage中NMSMTP1-PostMessage-FromA

13、ddress=User+Server;/填入寄信者的e-mail addressNMSMTP1-PostMessage-FromName=User;/填入寄件者的姓名NMSMTP1-PostMessage-Subject=Subject;/填入信件标题NMSMTP1-PostMessage-ToAddress-Add(To);/填入收信人的E-mail Address/填入副本收件者的E-mail AddressNMSMTP1-PostMessage-ToCarbonCopy-Add(LabeledEdit6-Text);/填入密件副本收件者的E-mail AddressNMSMTP1-Pos

14、tMessage-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-Te

15、xt=;LabeledEdit7-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);Labele

16、dEdit1-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(

17、),msg.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(GetActive

18、Window(),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)

19、;/将我们选取的档案的档名加到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中移除外.

20、也要从ListBox中移除/移除在这边都是使用Index的方式./因为我们在新增附件文件的时候.都是采用append的方式/所以不管是在PostMessage或是在ListBox中的Index都是一样的/并不会有顺序乱掉的问题.所以才可以使用这样的code./如果要将程序写的严谨一点.加入check file name的判断即可NMSMTP1-PostMessage-Attachments-Delete(ListBox1-ItemIndex);ListBox1-Items-Delete(ListBox1-ItemIndex);2123-3.寄信程序 范例23-1:执行结果一个简单的寄信程序就经

21、完成了,简单吧!不过,不知道大家有没有发现一些事情?如果Server突然连不上去怎么办?如果Server主机的地址被乱填怎么办?如果附加档名不存在怎么办?如果。有着太多不确定的问题在这个程序中了,那我们该如何解决呢?我们将在范例23-2中告诉各位这些不确定性的问题该如何解决。范例23-2主要是由范例23-1改过来的,根据范例23-1中的一些小缺点作一些改进。2223-3.寄信程序 范例23-2:寄信程序加强版的开发 范例说明 范例23-2主要是修正了范例23-1的一些缺点,包括了联机上的问题,附带档的问题,以及一些我们必须要自己handle的问题我们都在范例23-2中一并解决。在这个范例中最大

22、的差别就是在多了Connect和Disconnect这两个按钮。为什么要多这两个呢?最主要是因为如果你还没有确定可以跟Server连结上就将mail送出去,这时就会发生例外事件,如果我们在还没Connect之前不让使用者可以按下Send钮就可以保证不会发生Connect Fail的例外事件发生。2323-3.寄信程序 范例23-2:主要程序代码(main.cpp)可以用来检查输入资料的方法很多,包括用例外事件的写法或是利用一堆If来做判断都可以,在这个范例中,我们使用最基本的If来检查数据的正确性。在这个范例中除了用If来判断数据的正确性外,我们还使用了BCB所提供的一些函式来判断联机的状况。

23、在这份投影片中,我们只列出使用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!=)/将

24、各个字段的数据全部写入变量中,这样比较方便在程序中使用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,一般都是使用25NMSMTP1-UserID=User;/填入User Name2523-3.寄信程序 范例23-2:主要程序代码

25、(main.cpp)与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/如果在检查的时后发现有重要的信息没有填写,就会依照没有填写的项目一

26、一警告使用者要填入/在这边会警告的是第一个没填入的并不是只要没填就出现警告/如果要做到只要填写错误就出现错误讯息,只要把所有的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

27、=)msg=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:主要程序代码

28、(main.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-Cle

29、ar();/将一些改成只读的属性改回来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/-/Con

30、nection 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=;LabeledE

31、dit2-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;Bi

32、tBtn3-Enabled=false;BitBtn4-Enabled=true;BitBtn5-Enabled=false;2923-3.寄信程序 范例23-2:寄信程序加强版的开发 执行结果3023-3.寄信程序 如果各位有发现的话,在范例23-2应该会看到多了NMSMTP1ConnectionFailed这个函式,这个就是当ConnectionFailed的时候会触发的事件程序 在NMSMTP中有关各种Failed所引发的事件还有 OnAttatchmentNotFound、OnAuthenticationFailed、OnConnectionFailed、OnFailure、OnHea

33、derIncomplete、OnInvalidHost、OnRecipienNotFound等事件 这些事件的用法跟OnConnectionFailed的用法都差不多,大家可以尝试着使用看看,一套完善的发信软件必须要能handle住上面所列的那些Exception才不至于一天到晚出问题,也希望读者可以透过范例29-2继续完成还没Implement的这些Failed相关的Event,让这个寄信程序可以更完美。3123-4.HTTP抓网页程序 上一节我们举了Mail Client当作一个范例,这边我们再举一个利用HTTP Protocol来抓取网页数据的小程序。这个程序我们将放在范例23-3中。这

34、个程序最主要是抓取我们所指定的网页的数据,传回值为这个网页的Header以及Body。这个程序设计上相当的简单,只用了一个NMHTTP以及两个SaveDialog为隐藏的VCL组件,其余的就是PageControl、Panel、Edit、Memo、以及BitBtn等基本的组件。3223-4.HTTP抓网页程序 范例23-3:网页抓取范例 范例说明 在该范例中,我们将利用NMHTTP这个组件抓取网络上任何一个网页的Header以及Body这两个重要数据。底下我们将一步一步告诉读者我们该如何完成这个范例。Step 1:开新项目,并且将该使用到的VCL组件放到Form上面 Step 2:设定相关属性

35、 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

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

37、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范例 范例说明 Da

38、yTime、以及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(LabeledE

39、dit1-Text!=)&(LabeledEdit2-Text!=)/将相关的值设定到变量.方便使用AnsiString Server=LabeledEdit1-Text;int Port=LabeledEdit2-Text.ToInt();/指定Server Host以及Server PortNMDayTime1-Host=Server;NMDayTime1-Port=Port;/抓取Server端的DateTimeLabeledEdit3-Text=NMDayTime1-DayTimeStr;/-void _fastcall TForm1:NMDayTime1ConnectionFaile

40、d(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:主要程序代码(main.cpp

41、)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 PortNMTime1-Host=Server;NMTime1-Port=Port

42、;/抓取Server端的TimeLabeledEdit5-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不合法所发生的事件MessageBox(GetActiv

43、eWindow(),不合法的地址!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 Side Codev

44、oid _fastcall TForm1:BitBtn1Click(TObject*Sender)/清除Message LogMemo1-Clear();/-void _fastcall TForm1:NMMSGServ1MSG(TComponent*Sender,const AnsiString sFrom,const AnsiString sMsg)/将收到的讯息放在msg这个AnsiString中AnsiString msg=sFrom+=+sMsg;/停顿一些时间.让程序处理SocketSleep(100);/将收到的Log Append到Memo上Memo1-Lines-Add(ms

45、g);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 HostNMMsg1-FromName=LabeledEdit2-Text;/设定Senders NameNMMsg1-P

46、ostIt(LabeledEdit3-Text);/将要送出的Message Post出去给ServerLabeledEdit3-Text=;/将送出的内容从LabeledEdit中清除/-void _fastcall TForm1:LabeledEdit3KeyPress(TObject*Sender,char&Key)/功能跟BitBtn2一样,不过这个事件是用来抓取Enter这个键/如果我们在LabeledEdit中按下Enter,程序就会自动帮我们把讯息送出去if(Key=13)if(LabeledEdit1-Text!=)&(LabeledEdit2-Text!=)&(Labeled

47、Edit3-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的讯息传送回来。在这个程序中,我们除了将讯息传送回来外,我们也加入了时

48、间的计算,看看整个传送过程中需要多少时间。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();/与Server离线/-void _fastca

49、ll 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(LabeledEdit3-Text);Labe

50、ledEdit5-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=NMEcho1-Echo(LabeledEdit

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第二十三章--InterNet网络程序设计-C++-Builder-课件-简体中文版.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

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


163文库-Www.163Wenku.Com |网站地图|