资源描述:
《北邮程序设计实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、北京邮电大学信息与通信工程学院程序设计实践设计报告课题名称:邮件客户端学生姓名:班级:2班内序号:16学号:2日期:2014.6.4第8页北京邮电大学信息与通信工程学院课题概述1.1课题目标和主要内容本课题主要通过MFC的方式,利用SOCKET以及SMTP相关知识,来实现邮件(可携带附件)的定向发送,借此来复习和巩固C++编程的基本思想;学习SOCKET以及SMTP的相关知识,了解复杂网络应用程序的设计方法,并独立完成一个网络应用。1.2系统的主要功能1.邮件的发送(不携带附件)2.邮件的发送(携带附件)3.邮件接收
2、2.系统设计2.1系统总体框架程序的功能由MyEmailClientDlg.cpp,SMTP.cpp,MailMessage.cpp,Base64.cpp,MIMECode.cpp,MIMEContentAgent.cpp,MIMEMessage.cpp,AppOctetStream.cpp,MyEmailClient.cpp,StdAfx.cpp,TextPlain.cpp来实现。其中MIMECode.cpp,MIMEContentAgent.cpp,MIMEMessage.cpp,AppOctetStream.c
3、pp,TextPlain.cpp来对MIME协议进行封装,Base64.cpp来对Base64编码进行封装,SMTP.cpp是对SMTP协议进行封装,MailMessage.cpp是利用MIME协议对邮件内容的一个处理,最终通过MyEmailClientDlg.cpp来实现邮件的发送的功能。2.2系统详细设计[1]模块划分图及描述协议模块:包括网络应用程序中的各种协议,包括STMP协议,MIME协议等。处理模块:主要实现对数据的进行编码以及解码。实现模块:主要内容为邮件发送的具体步骤,相关按钮操作。[2]类关系图及描
4、述协议类:CSMTP,CTEXTPlai,CMIMECode,CMIMEContentAgent,CMIMEMessage,CAppOctetStream,CTextPlain.主要为协议中信息处理的中作用编码类:Base64,MailMessage.主要为对邮件信息的处理第8页北京邮电大学信息与通信工程学院实现类:CAboutDlg,CMyEmailClientApp,CMyEmailClientDlg.主要为MFC的框架构建以及邮件发送的实现。[3]程序流程图及描述[4]存储结构、内存分配主要使用字符串数组来进行
5、存储,同时还是用套接字来进行消息传输。2.3关键算法分析算法1:BOOLCSMTP::Connect()[1]通过SMTP协议内容的判断对服务器之间的连接状况的判断第8页北京邮电大学信息与通信工程学院[2]将SMTP的协议工作原理进行细化,分为1.TCP连接。2.客户端发送HELO命令。3.客户端发送AUTH LOGIN命令。4.用户名与密码的验证。分别在每一个步骤后对服务器返回的消息进行分析,判断是否连接正常。[3]由于没有其他参量,时间复杂度为O(1)。空间复杂度为O(1)。[4]1判断套接字是否创建成功。2判断
6、是否连接到服务器。3判断服务器是否响应。4发送HELO命令,同时判断服务器响应是否正确。5发送AUTHLOGIN命令,同时判断服务器响应是否正确。6发送经过Base64编码过后的用户名,同时判断服务器响应是否正确。7发送经过Base64编码过后的密码,同时判断服务器响应是否正确。8一切正常,将变量m_bConnected=TRUE。算法2:BOOLCSMTP::transmit_message(CMailMessage*msg)[1]向服务器发送邮件[2]根据SMTP发送邮件的工作原理,将其分为1.发送MAIL命令,
7、告知服务器发件人的邮件地址。2.发送RCPT命令,告知服务器的接收人的邮件地址。3.发送DATA命令。4.发送邮件内容。5.发送结束符,结束此次发送。[3]由于FOR循环中包含msg->GetNumRecipients(),所以时间复杂度为O(n)。空间复杂度为O(1)。[4]1.判断是否连接服务器正常。2.发送MAIL指令及发件人信息,并判断服务器响应。3.发送RCPT指令及收件人信息,多个收件人必须多次发送,最后判断服务器响应。4.发送DATA指令,并判断服务器响应。5.发送邮件内容。6.发送结束符,结束此次发送
8、,并判断服务器响应。算法3:BOOLCSMTP::get_response(UINTresponse_expected)[1]根据服务器的响应来判断是否正常[2]首先判断套接字是否接收成功,然后将得到的响应进行分析,判断结果[3]时间复杂度为O(1),空间复杂度为O(1)[4]1.判断是否接收套接字正常,不正常直接返回FALSE。2.判断接收的