Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4960
  • 博文数量: 6
  • 博客积分: 351
  • 博客等级: 一等列兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-06 15:38
文章分类

全部博文(6)

文章存档

2025年(6)

分类: 网络与安全

2025-04-18 14:51:45

能从链接中拿到一行一行的数据,就可以开始解析SMTP了。

解析过程

解析过程就是循环读取一行数据,然后按照协议顺序逐行解析。伪代码如下:

while (get_line() != 0) { if (state == ERROR) return; if (state == HEAD) { // 处理head的过程  state = BODY; continue; } if (state == BODY) { // 处理body的过程  state = END; continue; } // 其他部分处理  if (state == END) { // 结束退出处理过程  } }

其中的state用例记录解析的状态,但邮件头还未处理完的时候state始终保持为HEAD。这样下次包到来的时候进入解析函数后会继续解析邮件头。其他阶段的状态类似。当处理完头部的时候把state改为头部的后续阶段BODY,就进入邮件正文的解析。

解析的问题

这部分伪代码看起来还算清晰。但是真正实现的时候会遇到很多麻烦。比如,判断一个状态的结束和开始,比如需要重复进入同样的状态。还有代码的结构看起来也很混乱。在复杂混乱的实际代码中可能体现得不够清晰,但是这个经过精简的伪代码循环却给出一个提示:

解析的过程其实就是状态转换的过程...


原文: 实践求真知

参考:  protolens@gitee  protolens@github


阅读(14) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~