




已阅读5页,还剩60页未读, 继续免费阅读
(信号与信息处理专业论文)smtp电子邮件客户端与服务器的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大连理工大学硕士学位论文 摘要 在互联网迅猛发展的今天,电子邮件已经成为日常通信的重要手段。电子邮件系统 包括客户端和服务器两部分。邮件服务器根据运行平台不同可分为u n i x 和w i n d o w s 两 类。基于u n i x 平台的邮件系统虽然开放源码,但要求管理员不仅懂得邮件系统结构, 还要有丰富的u n i x 平台开发经验;而基于w i n d o w s 平台的邮件系统多为大型商业软件, 对服务器性能主机要求较高且价格昂贵。在实际应用和科研中,往往需要对邮件系统进 行二次开发,而现有的邮件客户端软件多数也不公开源码,人们无法增强其性能。因此, 我们自主开发了包括客户端和服务器的小型邮件系统d s p m a i l 。 本文设计并实现了d s p m a i l 电子邮件系统的s m t p 客户端、s m t p 接收服务器和转 发服务器部分,完成了邮件从发件人客户端到收件人在服务器上信箱的传输过程。本文 的主要工作如下: 。 ( 1 ) 论述了w i n d o w s 网络编程的基本知识,使用w i n d o w ss o c k e ta p i 实现了电子邮 件客户端与服务器的通信过程。 ( 2 ) 在客户端与服务器端分别实现了s m t p 和e s m t p 的命令和响应,完成邮件发 送、接收和转发的传输过程,并进行l o g i n 机制的身份认证。 ( 3 ) 在对r f c 8 2 2 协议和多用途网际邮件扩展协议( m i m e ) 深入研究的基础上,使用 c 语言实现了s m t p 客户端。它利用q u o t e d p r i n t a b l e 和b a s e 6 4 编码方式,能发送含有 多媒体附件的m i m e 邮件,并允许在邮件正文和邮件头中使用简体中文字符集。 ( 4 ) 利用m i c r o s o f t 基本类库( m r c ) 编写了基于w i n d o w s 平台简单的、易操作的客户 端收发邮件界面。 ( 5 ) 设计并实现了s m t p 接收服务器。通过禁止服务器中转过能和对用户进行身份 认证,限制了传递垃圾邮件。 ( 6 ) 采用存储并转发方式分发邮件,根据收件人地址进行投递或转发。 ( 7 ) 设计并实现了转发服务器。通过分析d n s 查询的命令和响应,实现了将收件人 信箱域名解析得到目的服务器i p 地址的功能。 最后,对d s p m a i l 邮件系统的兼容性和s m t p 服务器性能进行测试。结果表明, 客户端和服务器端可以与其它电子邮件系统相兼容,且在占用较小资源的情况下,能够 快速、稳定地并行处理多个客户端连接,在实际应用中能够正常地收发、传递电子邮件, 基本实现了设计目的。 关键词;电子邮件:s m t p ;m i m er 客户端;服务器 s m t p 电子邮件客户端与服务器的设计与实现 d e s i g na n di m p l e m e n t a t i o no f t h es m t pe - m a i lc l i e n ta n ds e r v e r a b s t r a c t w i t ht h ee x p l o s i v e l yg r o w i n go ft h ei n t e r n e ta tp r e s e n t , e - m a i lh a sb e c o m ea w i d e l y u s e dm e a n si nd a i l yc o m m u n i c a t i o n s t h ee - m a i ls y t e m sa r ec o m p o s e do fc l i e m sa n ds e r v e r s a c c o r d i n gt h ed i f f e r e n c eo ft h ep l a t f o r m , t h ee - n m i ls e r v e r sc a l lb ed i v i d e di n t ot w od a s s e s , ii n i xa n dw i n d o w s a l t h o u g hs e r v e r sb a s e do nl q q i xa g eo p e ns o u r c e , i ti s r e q u e s t e d a d m i n i s t r a w r sn o to n l ym a s t e rt h ef l a m eo fs e r v e r s ,b u ta l s oh a v ea b u n d a n te x p e r i e n c e so f p r o g r a m m eo nu n i x a m o n gv a r i o u ss e w e r s0 1 1w i n d o w sp l a t f o r m s ,m o s ta r el a r g e c o m m e r c i a ls o r w a r e s t h e ya r et o oe x p e n s i v ea n dr e q u i r eh i g hp e r f o r m a n c e so ft h eh o s t i n p r a c t i c e , t h ee - m a i ls y s t e m sa r eu s u a l l yd e v e l o p e da g a i n b u tt h ee x i s t i n gc l i e n t sa r en o ro p e n s o u r c e , i ti sd e f f i c l u tt oe n h a n c et h e i rc a p a b i l i t y s ow ed e v e l o pd s p m a i lw h i c hi sap o c k e t e - m a i ls y s t e mw i t ht h ec l i e n ta n ds e r v e r t h i sp a p e rd e s i g n sa n di m p l e m e n t st h es m t pc l i e n t , t h es m t pr e c e i v e rs e r v e ra n dt h e t r a n s m i t t i n gs e r v e ro f d s p m a i ls y s t e m , w h i c ht r a n s p o r tt h em a i lf r o mt h ea d d r e s s e rc l i e n tt o t h ea d d r e s s e em a i l b o xi nt h es e r v e r t h et h e s i sc o n t a i n st h ef o l l o w i n gp a r t s : ( 1 ) t h cc o m m u n i c a t i o np r o c e s s i n gb e t w e e nt h ec l i e n ta n ds e r v e ri si m p l e m e m e di n w i n s o c ka p i ( 2 ) t h ec o m m a n d sa n dr e s p o n s e so fs m r pa n de s m t pp r o t o c o l sa r ei m p l e m e n t e d , w h i c ha c c o m p l i s ht h et r a n s p o r tp r o c e s s i n go f m a i l sa n dal o g i nm e c h a n i s ma n t h e m i c a t i o n ( 3 ) t h es m t pc l i e n ti si m p l e m e n t e di ncl a n g u a g e t h em a i l sc o n t a i nm e d i aa c c e s s o r i e s a n du s eg b 3 2 1 2c h a r a c t e r - s e ta r es e n tb yu s i n gq u o t e d - p r i n t a b l ea n db a s e 6 4e n c o d i n gc o d e s ( 4 ) t h ee a s i l yo p e r a t i o n a li n t e r f a c eo f c l i e n t sw i t hm f c o i lw i n d o w so si sp r o g r a m m e d ( 5 ) t h es m t pr e c e i v e rs e r v e ri sd e s i g n e da ni m p l e m e n t e di ncl a n g u a g e f o rr e s t r i c t i n g s p a s m s , t h et r a n s f e rf u n c t i o ni sf o r b i d d e na n dt h ei d e n t i t yo f a d d r e s s e rm u s tb ea u t h e n t i c a t e d , ( 6 ) m a i l sa r ed i s t r i b u t e di nt h es t o r e - a n d - f o r w a r da r c h i t e c t u r e ( 7 ) i nt h e t h et r a n s m i t t i n gs e r v e r ,t h ef i n a ls e l n e r si pa d d r e s so fm a i li sa c q u i r eb yd n s q u c r y f i n a l l y , t h ec o m p a t i b i l i t yo f t h ed s p m a i ls y s t e ma n dt h ec a p a b i l i t yo f t h es 姗s e w e r a r et e s t e d ,i ti sr e v e a l e dt h a tt h ec l i e n ta n ds e r v e ra r eb o t hc o m p a t i b l ev e r yw e l lw i t ho t h e r s y s t e m sa n dt h es v l t ps e r v e rc a np a r a l l e ld e a l sw i t hs e v e r a lc o n n e c t i o n ss i m u l t a n e o u s l y t h e d s p m a i ls y s t e mc a ns e n d , r e c e i v ea n dt r a n s f e re - m a i l sn o r m a l l yi np r a c t i c e k e yw o r d s :e - m a i l ;s m t p ;m i m e ;c l i e n t ;s e r v e r i i 独创性说明 作者郑重声明:本硕士学位论文是我个人在导师指导下进行的研究工 作及取得研究成果。尽我所知,除了文中特别加以标注和致谢的地方外, 论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得大连理 工大学或者其他单位的学位或证书所使用过的材料。与我一同工作的同志 对本研究所做的贡献均已在论文中做了明确的说明并表示了谢意。 作者签名:摄啦蜻日期:型! 大连瑾工大学硕士研究生学位论文 大连理工大学学位论文版权使用授权书 本学位论文作者及指导教师宠全了解“大连理工大学硕士、博士学位论文版权使用 规定”,同意大连理工大学保留并自国家有关部门或机构送交学位论文的复印件和电子 版,允许论文被查阅和借阅。本人授权大连理工大学可以将本学位论文的全部或部分内 容编入有关数据库进行检索,也可采用影印、缩印或扫描等复制手段保存和汇编学位论 文。 作者签名 导师签名 拔渡蟪 盟年月三目 烨 大连理工大学硕士学位论文 致谢 两年紧张而又充实的学习生活匆匆即逝,在即将离开学校之际,我要对那些关心过 我、支持过我的人表达我深深地谢意。 首先,感谢我的导师殷福亮教授。本论文是在殷老师的细心指导和有力支持下完成 的。从论文的选题、研究方向的确定到论文的修改定稿都渗透着导师的心血。殷老师严 谨的治学态度、渊博的学识、求实的科研作风和平易近人的性格都深深熏陶着我。殷老 师鼓励我们说出自己见解的培养方式,增强了我逻辑表达能力,改变了我不主动与人交 流的性格,使我受益终生。在此,我向殷老师表示深深的敬意。 其次,感谢陈抬老师。在攻读硕士期间,陈老师始终给予我无私的帮助和关怀;同 时,他还对论文提出许多宝贵的意见和建议,确保论文正确的研究方向。同时,还要感 谢郭成安老师、邱天爽老师、李建华老师、孔祥维老师、马晓红老师、郝应光老师和冯 毅老师等,从他们那里我不仅学到了基础和专业知识,更确立了正确的科研态度和做人 道理。 我要感谢同组的韩金侠同学,论文的顺利完成离不开与她的真诚合作;在完成论文 期间,每当遇到困难,她总是毫无保留的给予我关心和帮助,与我共同讨论,一起解决 问题。感谢邮件技术资讯网论坛( w w w 5 d m a i l n e t ) 提供的学习和交流的平台,为我解决 实际编程中遇到的困难提供了很大帮助。 我还要感谢陈里铭、曹颖鸿、景源、侯代文等师兄师姐的热心帮助,他们对我的论 文提出了许多真诚而宝贵的建议。感谢教研室师弟师妹们,他们为教研室营造了浓厚而 融洽的科研和学习气氛。感谢刘字、卢永红、段长春、陈瑞清、马辉等同窗们,他们利 用自己的时间无私的帮助我测试邮件服务器,增强了服务器的稳定性;同时,这么多年 我们互相鼓励、共同成长,这份真挚的友谊值得我珍藏一生。 最后,感谢我的父母和女友,他们的支持和鼓励是我坚实的后盾,我的每一步成长 都离不开他们的无私奉献和温暖关怀。感谢他们对我做出的牺牲,让他们一生幸福是我 前进的最大动力,谨以此文献给我的父母和女友。 大连理工大学硕士学位论文 第一章概述 1 1 电子邮件的发展 电子邮件通过i n t e m e t 通信实现传统邮局的信件收发功能。与传统的信件传递相比, 电子邮件传递信息更加快捷、高效、廉价,可以在几分钟之内将信件传递到世界任何网 络用户的邮箱中,而且由于邮箱密码、邮件加密等技术的应用,电子邮件比传统邮件更 安全可靠。因此在短短三十年的发展后,电子邮件已成为i n t e m e t 上不可缺少的现代通 信工具据统计,四分之三以上的用户上网的主要目的是收发邮件,每天有十数亿封电 子邮件在全球传递。 电子邮件系统在i n t e m e t 使用之前就已经出现。1 9 7 1 年r a yt o m l i n s o n 首次在邮件 地址中使用 符号。但由于当时使用a r p a n e t 网络的用户较少,且受网络速度的限制, 用户只能发送简短的文本信息,电子邮件系统并没有收到足够的重视。 直到1 9 8 0 年代中期,随着互联网的建立和个人电脑的兴起,电子邮件系统才得到 发展,1 9 8 8 年由史蒂夫道纳尔编写的程序e u r o d a ,使电子邮件系统成为主流应用。 随着1 9 9 0 年代i n t e m e t 浏览器的诞生,网络用户迅速增加并且出现了提供免费邮件 的电子邮件系统,电子邮件被广泛使用。再后来基于w 曲的电子邮件系统的产生,允 许用户在任何一台连接i n t e m e t 网络的电脑上维护和使用邮箱,电子邮件系统进入了快 速发展阶段。 当前,电子邮件的用户己经从科学和教育行业发展到了普通家庭用户,几乎每个 i n t e m e t 的用户都具有一个或多个电子邮箱,而且电子邮件传递的信息也从普通文本信 息发展到包含声音、图像在内的多媒体信息。 1 2 电子邮件系统现状 目前用户使用电子邮件方式主要有两种:一种是使用公用的免费电子邮箱;另一种 是申请自己的邮件域名,建立单独的邮件服务器。 由于使用公共电子邮箱不需要用户进行维护,大部分个人用户都选择这种信箱,它 是目前最普遍的电子邮件使用方式。但是公共电子邮箱的弱点也很突出,由于邮件服务 器较多,它需要处理大量邮件,因此对邮件的投递和转发也需要较长的时间,有时甚至 几十分钟邮件才能传递到收件人信箱中;而且使用公共信箱经常会收到大量的垃圾邮 件,浪费了使用者的时间。 采用自建的邮件服务器系统,管理员可以自由设定系统功能,控制局域网内部与 i n t e m e t 网的邮件传递。由于用户较少,服务器可以快速的处理邮件,因此这种方式逐 s m t p 电子邮件客户端与服务器的设计与实现 渐被企业用户所采用。目前可供选择的邮件服务器系统大体上分为u n i x 式平台和 w i n d o w s 平台两大类。 在u n i x 式平台领域s e n d m a i l 、p o s t f i x 和q m a i l 等软件都是与操作平台一样开放源码 的邮件服务器。但这些软件对管理员的要求较高,管理员不仅要对邮件服务器的架构和 软件的具体实现有较深的了解,还需要有非常丰富的u n i x 平台开发经验【l , 2 1 。 w i n d o w s 是使用最广泛的操作系统,许多用户都希望在它上搭建邮件服务器。目前, 运行在w i n d o w s 平台的邮件服务器软件如e x c h a n g e 和l o t u sd o m i n o 等已经非常成熟, 但这些商业软件的价格十分昂贵,而且对运行服务器的主机要求比较严格,较适合于大 公司或对邮件系统的需求较高的用户 3 a o 但大量中小型办公环境用户希望自建的邮件服 务器能够在占用较小的资源的情况下,实现正常的邮件收发功能,甚至可以与其它类型 服务器共用主机。由于w i n d o w s 操作系统下没有开放源码的邮件服务器软件,因此我 们自主开发了d s p m a i l 邮件系统。 对于电子邮件客户端,目前广泛使用的如f o x m a i l 和o u t l o o k 等软件已经具有较完 善的功能。但由于这些客户端源代码不对外公开且本身具有很多附加功能,限制了程序 开发者在其上进一步研究。而现有开放源码的客户端并没有完整地实现邮件收发功能, 开发者需要对源代码完善后才可以使用。因此在垃圾邮件泛滥、邮件安全性问题严重的 今天,人们十分需要个开放、稳定的平台来进行研究。基于这种情况,我们着手自主 设计能够在实际应用中收发各种类型邮件的客户端软件。 1 3 电子邮件简介 电子邮件系统工作在t c p f l p 协议的应用层,采用客户端服务器模式,通过客户端 与服务器的相互通信实现邮件传递。它由两部分组成:m u a ( 用户代理) 和m t a ( 邮 件传输代理) 。它的传输过程如图l ,1 所示, m 1 am t a s m t p - 囤 s m t ps m t pr - 网_ m _ i 用户邮箱卜一m d a jm d a 卜_一用户邮箱f li ,- 厂= 工 倒倒 图1 1 电子邮件输递示意图 f i g 1 is k o t c hm a po f t r a n s f e r r i n ge m a i l 大连理工大学硕士学位论文 在图1 1 中,m u a 为用户提供读写邮件界面,也就是常说的客户端;m t a 运行在 邮件服务器上,负责邮件的完整的传递过程,主要包括s m t p 、p o p 3 和m d a 三部分。 m d a 负责将收件人是本地用户的邮件投递到用户邮箱中;而s m t p 和p o p 3 负责邮件 的传递和收件人从服务器上收取邮件的功能,本文在第二章对它们进行了详细介绍。 用户使用m u a 发送编写好邮件后,利用s m t p 协议发送给自己的m t a 。m t a 对 邮件的收件人进行判断,如果是本地用户则将邮件转给m d a 由它将邮件投递到收件 人邮箱;如果用户是其它服务器用户,m t a 则连接收件人的m t a ,利用s m t p 协议将 邮件转发,再由收件人的m d a 进行投递。最后收件人使用m l t a 利用p o p 3 协议将邮 件收取到本地主机上。 在邮件传递过程中,邮箱地址是必不可少的元素,它表明了邮件的起始与目的地址。 完整的邮件地址为:用户名 域名。用户名是用户在服务器上的标识,服务器通过用户 名来识别的具体邮箱;而域名则是邮箱所属的服务器的域名,其它服务器可以通过这个 域名查询到服务器的m 地址; 符号是专门用来表示邮箱地址的特殊符号,它代表“a t 的意思。这三部分组合在一起成为邮箱在i n t e r a c t 上的唯一标识。 1 2 本文内容及结构 本文设计并实现了d s p m a i l 的s m t p 客户端和s f r p 服务器,完成了从编写邮件 至投递邮件到收件人信箱的全部过程。各章的具体内容如下: 第二章从t c p i p 协议的基本知识入手,主要介绍w i n d o w s 操作系统的网络编程套 接口w i n d o w ss o c k e t 的主要内容。 第三章详细介绍在本文后续章节中将要使用的电子邮件相关协议,包括s m t p 、 e s m ,r p 、r f c 8 2 2 协议、m i m e 和d n s 等,并简要介绍电子邮件的另一个重要协议f o p 3 。 第四章设计了s m t p 电子邮件系统总体的性能和系统框图,以及s m t p 客户端、 s m t p 接收服务器和转发服务器的功能设计和流程图。并给出了客户端与服务器建立 t c p 连接的步骤。 第五章完成了s m t p 客户端主要模块:检查邮件完整性、生成标准邮件和发送邮件 的具体设计和实现;并且编写了电子邮件客户端完整的收发界面。 第六章设计了s m t p 接收服务器和转发服务器,实现了接收、投递和转发邮件。 第七章对电子邮件系统的兼容性和服务器的性能进行了测试。 s m t p 电子邮件客户端与服务器的设计与实现 第二章网络编程的基本原理 2 1t c p i p 协议 互联网是一个庞大而复杂的系统。对这种系统人们通常使用“分而治之”的方法,即 把一个大问题分成若干个小问题进行设计,并将各部分有机的结合起来,实现对整个系 统的设计。按照这一思想对网络系统进行设计,将它的软件分为若干层,每层负责不同 的通信功能。每一层好像一个“黑匣子”,它的内部处理过程对于其他层是透明的,相邻 层之间使用接口联系起来。 t c p i p 协议的体系结构可以分成四层,由高到低分别是:应用层、传输层、网络层 和数据链路层,如图2 1 所示。其中每一层都完成不同的功能f 5 - 7 。 应用层 囤回圈圈圆 传输层 二t 丑c p 妇u d p lil i 一i j 数据链路层 圆圈圈回 图2 1t c p i p 协议体系结构嗍 f i g 2 ia r c h i t e c t u r eo f t h et c p i pp r o t o c o ls y s t e m ( 1 ) 数据链路层在t c p f i p 协议的最底层,负责把接收到的网络层数据包通过物理接 口发送到传输介质上,或从物理网络上接收数据帧提取i p 数据交给网络层。 ( 2 ) 网络层是t c p m 协议中最重要的一层,该层的主要协议是i p 协议,所以也称 为p 层。它的功能就是进行路由选择将源主机上的分组发送到目的主机上。它的核心 协议除了口协议外,还有地址解析和反向地址解析协议( a r p r a r p ) 、网络消息控制协 大连理工大学硕士学位论文 议o c m p ) 和网络组管理协议( i o m p ) 。 ( 3 ) 通常所说的网络通信,实际上是两台主机上应用程序之闯的通信,这种通信是 由传输层所提供的,也叫做端对端( e n dt oe n d ) 通信。应用程序之间的通信根据不同的功 能,对通信质量的要求是不一样的。t c p i p 协议的传输层包含两个传输协议:一个是 t c p ,它提供了一种面向连接的、可靠的数据流服务;另一个是u d p ,它只能保证应用 程序之间最基本的通信要求,而没有提供数据传输过程的可靠性保证,被称为无连接、 不可靠的通信协议。 ( 4 ) 应用层处于t p 口协议的最上层,它向用户提供了特定的、常用的应用程序。 如现在广泛使用的远程登录( t e l e n t ) 、简单邮件传输协议( s m t p ) 、文件传输协议( e t a ) 、 超文本传输协议( h r r p ) 、域名系统( d n s ) 和简单网络管理协议( s n m p ) 等。这些协议有的 使用t c p 传输,如s m t p 和f t p 等;有的使用u d p 传输,如d n s 和s n m p 等。 2 2w i n d o w ss o c k e t 编程简介 在进行网路编程时,t c p i p 协议被封装在操作系统中,应用程序只能通过由系统给 定的网络编程接n ( s o c k e 0 来实现。s o c k e t 最早应用于b s d 的u n i x 系统中,称为 b e r k e l e ys o c k e ta p i ”。随着b s d 作为主流的u n i x 操作系统被广泛使用,“b e r k e l e y s o c k e t a p i ”也成为t c p i p 网络的编程接口标准。 w i n d o w ss o c k e t 是w i n d o w s 操作系统上使用的一套网络编程接口规范,常简称为 w i n s o c k 。w i m o c ka p i 根据“b e r k e l e ys o c k e ta p i ”制定,并根据w i n d o w s 操作系统的特 点进行了扩充。它的函数集分为与b e r k e l e y s o c k e t 相兼容的基本函数、网络数据信息检 索函数和w i n s o c k 专用扩展函数三类。本文为了使程序具有较好的移植性,除了 w s a s t a r t u p 0 和w s a c l e a n u p 0 这两个w i n d o w s 要求强制使用的扩展函数外,全部使用 w i n s o c k 中与b s ds o c k e t 相兼容的函数集t 5 7 。 2 2 。1 套接d ( s o c k e t ) w i n s o c ka p i 依靠套接e l ( s o c k e t ) 进行通信,它是网络通信的基石。一个正在使用的 套接口都有与其相关的进程,使用该进程的应用程序向它所在主机的套接口中写入要传 输的信息。套接口通过网卡的传输介质将信息发送到另一台主机的s o c k e t 中,使这段信 息能被其上的应用程序所使用,如图2 2 所示i s 。 s m t p 电子邮件客户端与服务器的设计与实现 主机a 主机b ,、 兰晦 网 网 塑豇弋: 络 络 1 网络旷誓 管 理 ,网专扣一网卡。 理 萌 恒 软 i - a , dl - = 4 j 软 件 件 图2 2 套接口示意图 f i g 2 2s k e t c hm a p o f s o c k e t 为了满足不同的通信程序对通信质量和性能的要求,有三种不同类型的套接口:流 式套接口、数据报套接口和原始套接口。应用程序一般仅在同一类型的套接口之闯通信, 不过只要低层通信协议允许,不同类型的套接口同样可以进行通信。下面就这三种套接 口进行简单的介绍【5 】: ( 1 ) 流式套接口提供了一种可靠的、面向连接的双向数据传输服务,它将传输的数 据看作是无边界的字节流有序、无重复地发送。流式套接口使用传输控制协议( t c p ) , 当用户想发送大批量的数据或对数据的传输有较高要求时,使用流式套接口。此外,在 数据传输时,如果连接断开,应用程序会被通知的。 ( 2 ) 数据报套接口提供了一种无连接、不可靠的双向数据传输服务。“无连接”是指 通信双方没有固定的通道用来传递数据;而“不可靠”意味着数据在传输过程中可能丢 失,并且不能保证数据按照发送顺序到达接收端。在t c p i p 协议中,使用u d p 协议实 现数据包套接口。在同一台计算机或在轻负载的局域网上,因为出现差错的可能性比较 小,所以可以使用数据报套接1 :2 进行数据传输。 ( 3 1 原始套接口允许对较低层协议进行直接访问,常用于检验新的网络协议实现。 w i n s o e k 并没有规定必须w i n d o s ws o c k e t sd l l 必须支持原始套接口。 2 2 2w i n s o c ka p i 函数 ( 1 ) 初始化和终止使用w i n s o c k 函数 每个使用w i n s o c ka p i 的应用程序,在调用w i n s o c k 函数之前都必须检查系统是否 加载w i n s o c k 库。应用程序通过调用函数w s a s t a r t u p o 实现这个功能,只有在成功的调 用该函数后,程序才能进一步的调用其他w i n s o e k 函数。 当应用程序不再使用w i n s o c ka p i 中的任何函数时,必须调用w s a c l e a n u p o 匪1 数 终止对w i n s o c k 函数库的使用。 大连理工大学硕士学位论文 ( 2 ) 建立和关闭套接口函数 应用程序在使用套接口通信前,必须使用s o c k e t 0 函数创建一个套接口,该函数具 有三个参数。参数a f 说明套接口所使用的协议地址族,如果希望建立一个u d p 或t c p 套接口,则用常量a fi n e t 表示使用互联网协议( p ) 。参数t y p e 描述套接口类型,在 a f 参数是a fi n e t 时,它只能是s o c ks t r e a m ,s o c k _ d r a m 或s o c k _ r a w 三个 套接口类型中的一个,分别表示要创建的是流式套接口、数据报套接口和原始套接口。 p r o t o c o l 参数说明套接口使用的特定协议,当参数a f 和t y p e 都确定后,它可以使用限定 了的值。表2 1 给出了使用口协议的套接口参数。 表2 1i p 地址族的套接口参数 t a b 2 1p a r a m e t e r so f s o c k e t si ni pa d d r e s sf a m i l y 当一个套接口不再使用时,一定要调用c l o s c s o c k e t o i 函数关闭这个套接口,以释放 与该套接口关联的所有资源,包括正在等待处理的数据。 ( 3 ) 地址绑定函数 在使用于流式和数据报套接口时,服务器端是使用s o c k e t ( ) 函数创建套接口后,还 不能马上使用,需要用b i n d o i 函数将套接口与本地主机地址和分配好的端口号联系起来 w i n s o c k 中使用s o c k a d d ri n 结构体指定m 地址和端口信息,它的定义如下: s t r u c ts o c k a d d r i n ( s h o r ts i n _ f a m i l y , s h o r ts i n _ p o r t , s t r u c ti n a d d rs i n a d d r , c h a r s i n z e r o 8 】) ; 其中,s i nf a m i l y 必须是a fi n e t ,说明使用i p 地址族;s i n _ _ p o n 和s i n a d d r l p 分别表 示端口号和p 地址:s i nz e r o 一般使用0 填充。 ( 4 ) 监听连接函数 服务器端将套接口与主机地址和端口号绑定后,用l i s t e n ( ) i 函数指示该套接口进入监 听连接状态请求的状态,等待客户端发出连接请求。除了用来标识一个已经绑定地址的 套接口的参数外,该函数只有一个b a e l d o g 参数指定了正待等待连接的最大队列长度a s m t p 电子邮件客户端与服务器的设计与实现 服务器按顺序从队列中接受连接请求,并将以接受的请求从队列中删除。 ( 5 ) 请求和接受连接函数 当服务器端进入监听连接状态后,客户端就可以在建好的套接口上用c o n n e c “) 函数 向服务器提出连接请求;而服务器端则使用a c c c p t ( ) 函数从等待连接队列中接受连接。 这样就在服务器套接口和客户端套接口之间建立了一个连接。这两个函数的定义如下 i n tc o n n e c t ( s o c k e ts , c o n s ts t r u c ts o c k a d d rf a r * n a m e ,i n tn a m e l e n ) ; i n ta c c e p t ( s o c k e ts , s t r u c ts o c k a d d rf a r * a d d r ,i n tn a m e l e n ) ; 两个函数中的三个参数类型十分相似;s 参数表示一个套接口。n a m e 和a d d r 参数 是以一个指向套接口地址结构体的指针,n a m e l e n 说明了地址结构体的长度。但在每个 函数中每个参数代表着不同的意义:c o n n e c ( ) 函数中,参数s 是将要建立连接的套接口, n a m e 指向的地址结构体中存放着远端服务器套接口地址信息;而a c c e p t 0 函数中,参数 s 为服务器上处于监听状态的套接口,a d d r 指向的结构体中存放着发出连接请求的客户 端套接口地址信息。 ( 6 ) 发送和接受数据函数 在w i n s o c k 函数库中有两套用于发送、接受数据的函数,它们分别是在已建立连接 套接口上发送接受数据的函数s e n d 0 、r e c v 0 和在无连接套接口上发送接受数据的函数 s e n d t 0 0 、r e c v f r o m 0 。这两套函数实现的功能相同,s e n d 0 和s e n d t 0 0 函数将缓冲区中的 数据发送给远端的套接口,r e c v o 和r e c v f r o m ( ) 函数从接收数据的缓冲区读取出远端套接 口发送到的信息。它们的不同之处在于,用s e n d t o o 和r e c v f r o m o 函数是每次发送,接受 数据时,都需要有一个地址结构体用来存放远端套接口信息。 ( 7 ) 套接口状态查询函数 使用s e n d 0 和r e c v ( ) 等函数进行i o 操作时,若套接口工作在阻塞方式线程会被迫进 入等待状态。为了防止程序出现这个情况,可以使用s e l e c t 0 函数,它在执行i o 操作前 对套接口进行检查。 s e 妣“) 函数可以通过参数设置分别检查套接口的可读性和可写性,它的返回有三种 状态:可以进行i o 操作、发生错误不能进行i o 操作和等待时间超出参数设定的时间。 该函数具有f d s 、* r e a d f d s 、w r i t e f d s 、* e x c e p t f d s 和+ t i m o u t 五个参数。其中,n f d s 参 数是为与b e r k e l e ya f i 相兼容并不使用;* r e a d f d s 、+ w d t e f d s 和+ e x c e p t f d s 参数为f d _ s 眈 类型的结构体,它代表一系列特定套接口的集合:* r e a d f d s 表示需要检查是否有可读数 据的套接口集合,w f i t e f d s 参数表示需要检查是否可写数据的套接口集合,而e x c e p f f d s 大连理工大学硕士学位论文 参数需要检查是否有外带数据的套接口集合;* t i m e o u t 参数是一个指向设定了超时时间 结构体的指针。 ( 8 ) 数据存储类型的转换函数 不同的计算机系统在存储由多个字节组成的信息时,主机对字节值的存储顺序不 同:将低序字节存放在低地址的方式叫做“小序在前( l i t t l e - e n d i a n ) ,而将高序字节存放 在低地址的方式叫做“大序在前( b i g - e n d i a n ) ”。在计算机中t c p i p 协议使用整数如端口 号和地址,是按计算机各自的字节顺序来表示的,被称为“主机字节( h o s t - b y t e ) ”。而网 络通信协议要求,在网络中使用的字节必须按大序在前”的形式来表示,一般称之为“网 络字节( n e t w o r k - b y t e ) ”。由于w i n d o w s 系列的操作系统使用的是“小序在前”的存储方式, 因此在w i n s o e k 中有一系列特定的a p i 函数用来进行主机字节顺序和网络字节顺序的转 换: h t o n l 0 和h t o n s o :将主机字节顺序的数转化为网络字节顺序; n t o l l l o 和n t o h s 0 :将网络字节顺序的数转化为主机字节顺序。 在网络程序设计中,常常会使用到m 地址,它一般使用点分十进制形式表示,如 2 0 2 1 1 8 6 6 6 ,这种m 地址在程序中一般是用a c s i i 字符串的形式存储的;但在网络上, p 地址是以网络字节顺序表示的。w i n s o c k 函数库中,分别用m e u a d d r o 和i n e t _ n t o a o 函数进行点分十进制表示的i p 地址到网络字节顺序的m 地址的转换及其逆转换。 获取主机及网络信息函数 网络应用程序有时需要获取主机与网络的相关信息如主机名、远端地址等,这些信 息一般存放在数据文件中。而获取这些主机和网络信息的函数被称作数据库函数。 w i n s o e k 函数库中数据库函数根据获取信息得不同可分为获取主机信息、协议信息和服 务信息这三类。在本文中使用的这类函数为:g e t h o s t n a m e ( ) 用来获取主机名; g e t h o s t b y n a m e o 函数根据主机名获取包含主机的妒地址的主机信息。 s m t p 电子邮件客户端与服务器的设计与实现 第三章电子邮件相关协议 世界上负责制订互联网方面技术标准的组织( i e t f ) 为在i n t e m e t 上传递的电子邮件 制定了一系列协议:用于发送和接收电子邮件的s m t p 和p o p 3 协议,规定邮件格式的 r f c 8 2 2 和m i m e 协议,以及其它与电子邮件相关的协议们。下面对这些协议做简要 介绍。 3 ,l 简单邮件传输协议( s m t p ) 简单邮件传输协议s m t p 是最早出现的i n t e m e t 应用协议之一。它可以把邮件直接 传输到目的服务器,或以某个邮件服务器为中转站,先把邮件传送到中转站上,再由中 转站负责将邮件传输到目的服务器d , i i 。 $ m t p 基于客户服务器模式工作:邮件服务器在t c p 的2 5 端口等待客户端的请求; 当客户端发起的连接请求被服务器接受后,就连接一条从客户端到服务器的t c p 连接, 然后通过客户端与服务器相互进行应答完成邮件的发送。它的传输模型如图3 1 所示。 s e n d e r -s m t pc o m m a n d s r e p l i e s a n dm a i l 。 r e :c e i v e r - s m t p s m t p t c p 图3 is m t p 邮件传输模型图 f i g 3 1m o d e lf i g u r eo f w a n s m i t t i n ge m a i lw i t hs m t p 邮件的传输过程就是客户端与服务器对s m t p 命令的问答过程:客户端向服务器发 送命令,服务器进行判断后做出相应的应答。s m t p 命令与应答都由7 b i ta s c i i 字符组 成,传送时采用8 b i t 通道并把最高位填充为0 。 s m t p 命令是由命令码和其后的参数域组成的。命令码由四个字母组成的,不区别 大小写;参数域则是长度不定的字符串并以“c r l f ”表示结束,接收端在收到“c r l f ”前 不会对命令做任何处理。 , 对s m t p 命令的响应是多样的,它确定了在邮件传输过程中请求和处理的情况,也 保证了发送s m t p 知道接收s m t p 的状态。每个命令必须有且只有一个响应。s m t p 响 应由三位数字组成,其后跟一些文本信息。这三位数字有各自的表示意义,共同帮助客 户端决定下一个进行的状态,而文本信息则介绍了这三位数字所代表的具体意义。对发 大连理工大学硕士学位论文 送者来说,这三位数字响应已经包括了足够的信息,不需要再阅读文本,就可以进行下 一步操作;文本信息仅仅是为了在某些特定情况下让用户了解s m t p 状态,一般并不显 示出来,而且文本信息与接收端相关,对于同一个命令的相同响应,不同的s m t p 服务 器的文本信息可能会不同。表3 1 给出了s m t p 协议基本的数字响应及它们所表示的意 义。 表3 1s m t p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古代遗迹发掘与学术研究承诺书(3篇)
- 2025年青光眼用药项目规划申请报告
- 智能制造过程管控承诺书(7篇)
- 快乐运动会的场景描写记叙文7篇范文
- 推进健康安全管理保证承诺书7篇
- 企业质量管控能力提升承诺书4篇
- 2025贵州剑河县农村集体经济组织选聘职业经理人(总经理)17人模拟试卷及完整答案详解一套
- 2025年山东土地乡村振兴集团有限公司招聘考前自测高频考点模拟试题及答案详解(网校专用)
- 一次难忘的比赛记叙文描写比赛的经过6篇
- 内蒙古赤峰市2024-2025学年高一下学期期末联考地理试题(解析版)
- 基于OCT技术的稳定型心绞痛冠脉病变斑块特征精准评价与临床意义探究
- 2025年中国盐业集团招聘考试面试经验
- 知识产权企业介绍
- 食品安全总监知识培训课件
- 2025福建福州市事业单位招聘772人考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025年共青团考试题库(附答案)
- 全国数智产业发展研究报告(2024-2025)
- 头颈部鳞癌治疗现状及免疫治疗进展
- CB/T 749-1997固定钢质百叶窗
- GYB培训全课件(最终版)
- 大桥墩柱盖梁抱箍施工方案
评论
0/150
提交评论