Upload
lesley
View
116
Download
3
Embed Size (px)
DESCRIPTION
基于 WinSock 的邮件系统. 1.1 SMTP 发送邮件服务器 (c 语言 ). 1.2 POP3 接受邮件服务器 (c 语言 ). 1 设计目标 :. 1.3 php WebMail 客户端. 2 相关技术介绍 :. 2.1 TCP/IP 协议. - PowerPoint PPT Presentation
Citation preview
基于 WinSock 的邮件系统1 设计目标 :
1.1 SMTP 发送邮件服务器 (c 语言 )1.2 POP3 接受邮件服务器 (c 语言 )
1.3 php WebMail 客户端
2 相关技术介绍 :
2.1 TCP/IP协议 2.1.1 发展至今最成功的通信协议,它源于 20 世纪 60年代末美国政府资助的一个分组交换网络研究项目,到20 世纪 90 年代已经发展成为计算机之间最常用的组网协议。它允许分布在各地的装着完全不同的系统的计算机互相通信。它是一个真正的开放系统,该协议的定义及多中实现可以通过多途径无偿得到。随着 pc 的普及,tcp/ip 以其开放的特点,成为了 internet 的基础,该广域网 (WAN) 把全世界数以百万的电脑连接在了一起。
2.1.2 TCP/IP 结构 , 如下图 :
各种应用层协议
TCP UDP
IP
设备驱动程序及接口卡
应用层
传输层网络层链路层
2.1.3 各层功能概述 :
(1) 链路层:有时被称作数据链路层或网络接口层,通 常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆 ( 或其他任何传输媒介 )的物理接口细节。该层包含的协议有 :ARP( 地址转换协议 ) 和 RARP( 反向地址转换协议 ).
(2) 网络层:有时又被称为互连网层,负责分组在网络中的活动,包括 ip( 网际协议 ) 、 ICMP(Internet 互连网控制报文协议 ) 以及 IGMP(Internet 组管理协议 ) 。(3) 传输层:该层主要为两台主机的应用程序提供端到端的数据通信,它分为两个不同的协议: TCP( 传输控制协议 ) 和 UDP( 用户数据报协议 ) 。 TCP 提供端到端的质量保证的数据传输,该层负责数据的分组,质量控制和超时重发等,对于应用层来说,就可以忽略这些工作。 UDP 则只提供简单的把数据从一端发送到另外一端,至于数据是否到达或按时到达、数据是否损坏都必须由应用层来做。这两种协议各有用途,前者可用于面向连接的应用,而后者则在及时性服务中有着重要的用途,如网络多媒体通信等。
(4) 应用层:该层负责处理实际的应用程序细节,包括大家十分熟悉的 Telnet (电子公告版) ,HTTP(World Wide Web 服务 ),SMTP( 简单邮件传输协议 ),FTP( 简单文件传输协议 ) 和 SNMP( 简单网络管理协议 ) 等著名协议。
Web 服务器 Web 服务器http 协议
TCP TCPtcp 协议
IP IPIPIp 协议 Ip 协议
以太网驱动程序 以太网驱动程序 令牌环网驱动程序 令牌环网驱动程序
令牌环
路由器
以太网
2.2 winsock 网络编程技术 由于 Winsock 的服务是以动态链接库Winsock Dll形式实现的 ,所以必须先调用 WSAStartup函数对 Winso
c Dll进行初始化,协商Winsock 的版本支持,并分配必要的资源。如果在调用 Winsock函数之前,没有加载 winsock库,则会返回 SOCKET_ERROR错误 , 在应用程序关闭套接字后,还应调用 WSACleanup函数终止对 Winsock Dll 的使用,并释放资源,以备下次使用 .2.2.2 错误检查和控制: 错误检查和控制对于 Winsock 应用程序是至关重要的,不成功的 Winsock调用返回的最常见的值是 SOCKET_ERROR ,它是值为 -1 的常量。如果错误发生了,可以用WSAGetLastError函数来获得一段代码,这段代码明确地表明错误的原因。:
2.2.1 Winsock 的启动和终止:
2.2.3 Winsock编程模型: socket()
服务器
bind()
listen()
accept()
阻塞,等待客户数connect()
socket()
客户机
建立连接
write()read()请求数据
处理服务请求
write() read()应答数据
close() close()
2.3.1 多线程技术介绍 :
2.3 windows 多线程编程技术 在 Windows 的一个进程内,包含一个或多个线程,线程是指进程的一条执行路径,它包含独立的堆栈和 CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件,信号标识及动态分配的内存等等,一个进程的所有线程使用同一个 32位地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行。线程具有优先级别,优先权低的线程必须等到优先权较高的线程执行完任务后再执行,在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样就可使处理器的任务平衡,也提高了系统的效率。进程的主线程在任何需要的时候都可以创建新的线程,当线程执行完任务后,自动终止线程,当进程结束后,所有的线程都终止。
2.3.2线程的创建和终止线程: Win32函数库中提供了多线程控制的操作函数,包括创建线程、终止线程、建立互斥区等。首先,在应用程序的主线程或其他活动线程的适当地方创建新的线程,创建了新线程后,则该线程就开始启动执行了当线程函数返回后,线程自动终止,如果线程在执行中终止的话,则可以调用函数实现 , 相关函数等请查看论文
3 SMTP 服务器概要设计3.1本服务器实现的命令集:HELO,MAIL FROM,RCPT TO,DATA,RSET,NOOP,QUIT,HELP
3.2 SMTP 服务器工作流程图 :
smtp 服务器主线程开启端口 25 ,开始监听一个客户发起连接请求要求服务
服务器开启一个新线程为该客户服务
是否已经达到最大连接数 MAX_CONNECTION_NUM
否
向该用户发送连接数过多信息,并关闭相应连接
是
3.2.1 SMTP 服务器主线程流程 :
3.2.2 SMTP 服务器客户服务线程流程 :
获得 客 户 服 务 id号根据 id号将客户登录信息记入 Sy
stem.log日志文件
读取客户发送命令并处理命令
返回客户处理结果
3.2.3 SMTP 服务器客户端命令处理流程 :
读入客户输入的第一条命令
是 HELO吗响应 503 ,并读入下条命令
不是
响应 250欢迎信息
处理 MAIL FROM命令
否下条命令为 MAIL FR
OM?
是
下条命令为 RCPT TO?
是 处理 RCPT TO命令否
下条命令为 DATA?是 处理 DATA命令
下条命令为 REST?是 处理 REST命令
下条命令为 NOOP?
下条命令为 HELP?
下条命令为 QUIT?
处理 NOOP命令是
处理 HELP命令是
否
否
否
否 是 处理 QUIT命令
向客户输出 502 命令不可实现,并读入下条信息
3.2.3 SMTP 服务器各个命令详细处理流程 :(见论文 )
4 POP3 服务器概要设计4.1本服务器实现的命令集:
USER PASS DELE LIST LOOP RETR RSET STAT UIDL QUIT
4.2 pop3 服务器工作流程图 :
pop3 服务器主线程开启端口 110 ,开始监听一个客户发起连接请求要求服务
4.2.1 pop3 服务器主线程流程图 :
服务器开启一个新线程为该客户服务
是否已经达到最大连接数 MAX_CONNECTION_
NUM
否
向该用户发送连接数过多信息,并关闭相应连接
是
4.2.2 pop3 服务器客户服务线程流程 :
获得客户服务 id号根据 id号将客户登录信息记入 Sy
stem.log日志文件
读取客户发送命令并处理命令
返回客户处理结果
4.2.3 pop3 服务器客户端命令处理流程 :
读入客户输入的下一条命令处理 USER命令
否命令为 USER?
是
命令为 PASS?是 处理 PASS命令
否命令为 STAT?
是 处理 STAT命令
命令为 DELE?
是 处理 DELE命令
命令为 LIST
命令为 RETR
处理 LIST命令是
处理 RETR命令是
否
否
否
否
①
命令为 RSET? 处理 RSET命令
向客户输出命令不可实现
命令为 UIDL
命令为 LOOP?
命令为 QUTI?
处理 UIDL命令是
是
是
处理 LOOP命令
处理 QUIT命令
否
否
否
否
是命令为 RSET?①①
4.2.3 pop3 服务器各个命令详细处理流程 :(见论文 )
5 SMTP 服务器和 POP3 服务器详细设计 (见论文 )
6 测试6.1 c 语言编写的测试程序6.1.1 SMTP 服务器简单测试程序
(1)建立和 SMTP 服务器连接(2) 发送 HELO命令并读取服务器响应信息(3) 发送 MAIL FROM命令并回显服务器返回信息(4) 发送 RCPT TO命令并回显服务器返回信息
(5) 发送 DATA命令通知(6) 发送邮件正文并回显服务器信息(7) 发送 QUIT命令结束和服务器的会话(8)SMTP测试程序命令行显示结果
6.1.2 POP3 服务器测试程序
(1)建立和 POP3 服务器的连接
(10)POP3 服务器测试程序命令行运行效果(9) 发送” QUIT”命令并回显服务器信息(8) 发送” DELE 1”并回显服务器信息(7) 发送” RETR 1”并回显服务器信息(6) 发送” LIST 1”并回显服务器信息(5) 发送” LIST”命令并回显服务器信息(4) 发送” STAT”命令并回显服务器信息(3) 发送” PASS 198517”命令并回显服务器信息(2) 发送” USER wangjianlin1985”命令并回显服务器信息
6.2 php Web 客户端测试程序 :
6.2.1 以用户名 wangjianlin1985 密码 198517登陆 php 邮件客户端
6.2.2进入邮件系统后显示如下 :
6.2.3进入收件箱查看邮件列表 :
6.2.4查看邮件详细内容 :
6.2.5 给 [email protected]写一封邮件并抄送给[email protected]:
6.2.6 发送邮件后回显的执行命令状态