如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
广州大学学生实验报告开课学院及实验室:计机楼603A2014年5月14日学院机械与电气工程学院专业、班电信113姓名叶云青学号1107400057实验课程名称网络编程实验成绩实验项目名称实验3接收电子邮件的程序实例指导老师刘外喜一、实验目的用户可以利用某个网站的pop3电子邮件接收服务器来接收你在该网站的电子邮箱里的信件二、实验原理首先填入pop3服务器地址、邮箱用户名和口令,并决定是否要删除邮箱里的邮件;然后点击“连接”按钮,程序会与服务器建立TCP连接,然后发送用户名和口令,经过验证,进入POP3会话。通过命令交互,将邮箱中的所有邮件取回。在此过程中,左下方的多文本列表框(RichTextBox)会显示全部的会话信息。信件全部下载完毕后,左上方的组合列表框中就有了所有信件的标题字段。用户可以从中选择一封信件,查看或者存储。然后可以断开连接。实例只介绍了接收邮件,提取信头标题字段的有关内容,能正确显示符合Rfc822规范的邮件。由于目前邮件结构非常复杂,限于篇幅,程序没有对收到的信件作进一步的分析,也没有对编码的信息进行译码,读者看到的是收信的原始信息,有兴趣的读者可以进一步扩展程序的功能,例如,对信件进行MIME格式分析,将附件提取出来。程序实现的技术要点是:1.运用Windows的消息驱动机制除了由MFC创建的应用程序类和对话框类以外,程序从CAsyncSocket类派生了自己的套接字类,并为它添加了OnConnect()、OnClose()和OnReceive()三个事件处理函数。程序的会话过程几乎完全是由FD_READ消息驱动的。建立连接后,服务器会返回信息,接到命令后,服务器也会返回信息。当信息到达客户端套接字的接收缓冲区时,会触发FD_READ消息,并自动执行OnReceive()函数。该函数接收服务器发来的信息,进行分析处理,然后再发送相应的命令。这命令又会引来服务器的响应,又会触发客户端的FD_READ消息。如此周而复始,完成POP会话的全过程。2.通过状态转换来控制会话命令的发布顺序程序定义了一个枚举类型STATE,并为套接字类定义了一个STATE类型的变量state,用来表示POP会话的实际状态。容易看出,枚举的成员符号是客户端向POP3服务器发送的命令。typedefenum{FIRST=0,USER,PASS,STAT,LIST,RETR,ENDRETR,DELE,GOON}STATE;STATEstate;当用户点击“连接”按钮与服务器建立TCP连接时,将state置为初值FIRST;然后,每当收到服务器的信息,一方面根据会话的当前状态作响应的分析处理,决定应当继续发送哪条命令,另一方面发出下一个命令以后,改变state的值,将它置为该命令的状态对应的值,这就实现了会话过程中的状态转换,并保证会话按照既定的顺序进行。读者可仔细分析mySock::AnalyzeMsg()函数。3.用结构向量来缓存信件信息首先程序定义了一个结构类型,用来缓存一封信件信息。typedefstruct{CStringtext;//存储信件的文本intmsgSize;//信件的大小intretrSize;//信件实际下载的大小,在下载过程中动态变化}MESSAGEPROP;然后为套接字类定义了一个向量型的成员变量,相当于一个数组,其成员是上述的结构。vector<MESSAGEPROP>msgs;在pop会话中,一次性地将信箱中所有信件的信息转入这个向量,然后可以查阅,存储到文件中,或者进行其他处理。三、使用仪器、材料装有VisualC++的PC四、实验步骤1、创建服务器端程序:1.使用MFCAppWizard创建应用程序框架2.为对话框添加控件3.定义控件的成员变量4.为对话框中的控件对象添加事件响应函数5.为Cpop3Dlg类添加其它的成员6.创建从CAsyncSocket类继承的派生类7.手工添加包含语句以及事件函数和成员函数的代码8.分阶段编译执行,进行测试五、实验过程原始记录(数据、图表、计算等)1.使用MFCAppWizard创建应用程序框架工程名是pop3,应用程序的类型是基于对话框的,对话框的标题是“接收电子邮件客户端程序”,需要WindowsSockets的支持,其它部分接受系统的默认设置就可以。向导自动为应用程序创建了两个类:应用程序类:CPop3App,基类是CWinApp,对应的文件是pop3.h和pop3.cpp。对话框类:CPop3Dlg,基类是CDialog,对应的文件是pop3Dlg.h和pop3Dlg.cpp。2.为对话框添加控件在程序的主对话框界面中按照图10-9添加相应的可视控件对象,并按照表