网络程序之HTTP、SMTP篇(其二)

上篇文章中,我说明了一下基于TCP和UDP协议实现的服务器、客户端。但是协议原理没进行说明,原因一是网上有很多说的很好的文章,二是我是更倾向于源码实现。所以今天给说的HTTP和SMTP协议也是一样,不对协议做具体详解,求知欲强的同僚自行科普。不了解的也没太大问题,还是不影响编程。好了,开始进入正题,进行洗脑。哈哈。

HTTP和SMTP协议均属于应用层协议,均是基于传输层TCP协议实现的,下面是网络模型层的一张图,可以看看层次结构:
在这里插入图片描述

其实,在网络中传输数据,我们要的只是物理层的比特流。上篇文章中我是基于传输层协议实现的服务器和客户端,所以每次服务器和客户端进行一次通信(比如服务器向客户端发送了一个字节的数据),那么这是在网络中的数据表现形式:

数据链路层协议头 + 网络层协议头 + 传输层协议头 + 比特流数据

如果是基于应用层协议实现的话,那就得多一个头部数据:

数据链路层协议头 + 网络层协议头 + 传输层协议头 + 应用层协议头 + 比特流数据

所以我只是发了一个字节的数据,但是就得加上这么些头部数据,是不是浪费流量?其实不然,之所以有这么些网络协议以及层次结构出现,也是因为处于方便,高效率方面的考虑。对这段历史感兴趣,可以去看看网络协议发展史。

从上面的结构层次来看,越上层(应用层)的协议越复杂,越下层(物理层)的协议越简单。今天说的SMTP和HTTP协议,我只对客户端进行说明。

如何编写基于SMTP协议的客户端?

SMPT协议是一种基于TCP协议实现的邮件传输协议,固定端口号25。这里我说明一些借助QQ邮箱实现的发送邮件(带附件)的程序。

首先,需要保证有一个QQ邮箱,并得开启POP3/SMTP服务,见下图(邮箱设置->账户):
在这里插入图片描述

开启后会得到一个密钥,这个密钥就是能操作的关键,切记不要告诉任何人。有了这个密钥就可以用代码让这个邮箱发送邮件了。主要记住下面几步:

1)建立TCP链接(上篇文章以说明)

2)发送HELO(运行该客户端的主机名,末尾加\r\n)

3)发送STARTTLS(加密连线,末尾加\r\n)

4)发送AUTH LOGIN(登入认证,末尾加\r\n)

5)发送账号(QQ邮箱账号,base64编码格式,末尾加\r\n)

6)发送密钥(开启POP3/SMTP服务后得到的密钥,并不是QQ邮箱密码;base64编码格式,末尾加\r\n)

7)发送MAIL FROM(邮件发送者QQ邮箱账号,末尾加\r\n)

8)发送RCPT TO(邮件接受者QQ邮箱账号,末尾加\r\n)

9)发送数据DATA(开始发送数据标识,末尾加\r\n)

10)发送数据(主题,正文,附件)

上述就是使用QQ邮箱作为代发邮件的步骤,代码会在最后以链接的形式给出。但是总的来说,稍微麻烦一点,不过还好。

如何编写基于HTTP协议的客户端?

HTTP协议是超文本传输协议,应该都很熟悉,网络上在浏览器上运行的各种网页就用的是这么个东西,所以HTTP协议是在应用层协议中的“明星”。HTTP属性字段特别多,但如果保持简单的文本数据传输,只需要封装的时候加上几个字段就OK了。记住下面几步:

1)建立TCP链接(上篇文章以说明)

2)发送协议版本和请求方式

3)发送属性字段(Content-Length是数据长度字段,不包含头部,仅仅是下面4)中的数据长度)

4)数据内容

上述就是使用HTTP协议的客户端的总体步骤,可能比较抽象。其实也就是这么回事,麻烦就是得根据HTTP协议的字段功能做相应的处理,代码在最后以链接的形式给出。

到这里,SMTP协议和HTTP协议的客户端的简单实现以及完成,因为我也是只是懂了大概,非专供这块。我为什么会接触这块的原因是当时做的网络程序(C/C++编写)有个留言反馈功能以及下载图片功能,到网上也是找了很久,最后找到的demo都没法成功运行,最后自己了解了,所以想总结一些分享给和我一样的同僚,减少弯路。

最后,附上C++封装SMTP和HTTP客户端(专供其他语言的自行封装)。祝早日成功!

链接:https://pan.baidu.com/s/1QLRHj0Yl1gKtmi6dd69bFg
提取码:k895

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值