位置: 编程技术 - 正文

结合Python的SimpleHTTPServer源码来解析socket通信(python simple)

编辑:rootadmin

推荐整理分享结合Python的SimpleHTTPServer源码来解析socket通信(python simple),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:结合python的三维打印的路径规划要下载什么软件,python simpleguitk,python simpleguitk,利用python进行,利用python进行,python simpleguitk,python simple,结合python的三维打印的路径规划软件下载,内容如对您有帮助,希望把文章链接给更多的朋友!

何谓socket计算机,顾名思义即是用来做计算。因而也需要输入和输出,输入需要计算的条件,输出计算结果。这些输入输出可以抽象为I/O(input output)。

Unix的计算机处理IO是通过文件的抽象。计算机不同的进程之间也有输入输出,也就是通信。因此这这个通信也是通过文件的抽象文件描述符来进行。

在同一台计算机,进程之间可以这样通信,如果是不同的计算机呢?网络上不同的计算机,也可以通信,那么就得使用网络套接字(socket)。socket就是在不同计算机之间进行通信的一个抽象。他工作于TCP/IP协议中应用层和传输层之间的一个抽象。如下图:

服务器通信socket保证了不同计算机之间的通信,也就是网络通信。对于网站,通信模型是客户端服务器之间的通信。两个端都建立一个socket对象,然后通过socket对象对数据进行传输。通常服务器处于一个无线循环,等待客户端连接:

socket 通信实例socket接口是操作系统提供的,调用操作系统的接口。当然高级语言一般也封装了好用的函数接口,下面用python代码写一个简单的socket服务端例子:

server.py

client.py

TCP 三次握手python代码写套接字很简单。传说的TCP三次握手又是如何体现的呢?什么是三次握手呢&#;

第一握:首先客户端发送一个syn,请求连接,第二握:服务器收到之后确认,并发送一个 syn ack应答第三握:客户端接收到服务器发来的应答之后再给服务器发送建立连接的确定。用下面的比喻就是

C:约么?

S:约

C:好的

约会这样就建立了一个TCP连接会话。如果是要断开连接,大致过程是:

上图也很清晰的表明了三次握手的socket具体过程。

客户端socket对象connect调用之后进行阻塞,此过程发送了一个syn。 服务器socket对象调用accept函数之后阻塞,直到客户端发送来的syn,然后发送syn和ack应答 客户端socket对象收到服务端发送的应答之后,再发送一个ack给服务器,并返回connect调用,建立连接。 服务器socket对象接受客户端最后一次握手确定ack返回accept函数,建立连接。

至此,客户端和服务器的socket通信连接建立完成,剩下的就是两个端的连接对象收发数据,从而完成网络通信。

结合Python的SimpleHTTPServer源码来解析socket通信(python simple)

SimpleHTTPServer构建一个简单的HTTP服务,需要继承HTTPServer,同时requesthandler也需要继承BaseHTTPRequestHandler。python已经实现了一个例子,那就是SimpleHTTPServer。因此分析SimpleHTTPServer来查看如何使用前面的一些类构建http服务。

曾经为了表示python的简洁优雅,经常会举这样的例子,python可以一行代码开启一个服务器。

这里的SimpleHTTPServer就是实现了HTTPServer的模块。

SimpleHTTPServer通过调用BaseHTTPServer模块的test方法做为入口。

test方法做了两件事,第一件就是使用HTTPServer接受一个监听地址和requestClass参数,创建了一个实例对象,调用server_forever方法开启服务。

1.SimpleHTTPRequestHandler根据之前的分析,使用httpserver的服务,我们只需要继续BaseHTTPRequestHandler,并提供自省的method方法即可。

do_GET 和 do_HEAD 分别实现了http的get请求和head请求的处理。他们调用send_head方法:

send_head 方法通过uri的path分析得到客户请求的网路路径。构造head的mime元信息并发送到客户端,然后返回一个打开path的文件句柄。

2.copyfiledo_GET的下一步就是通过 copyfile方法,将客户请求的path的文件数据写入到缓冲可写文件中,发送给客户端。

3.list_directorySimpleHTTPServer模块还提供了list_directory方法,用于响应path是一个目录,而不是文件的情况。

由此可见,处理客户端的请求,只需要使用 send_reponse, send_header 和 end_headers ,就能向客户端发送reponse。

4.自定义http服务定义一个CustomHTTPRequestHadnler继承自BaseHTTPRequestHandler。在其内实现do_GET 方法来处理get请求。

然后再定义一个CustomHTTPServer继承自HTTPServer,它接受CustomHTTPRequestHadnler作为自己的handler。简单的代码如下:

使用curl访问可以得到

控制台会打出访问的log。

从socket的建立,select的IO模式,再到Server和Handler的组合构建服务。我们已经熟悉了python的基本网络编程。python的web开发中,更多是使用WSGI协议。实现该协议的还有 uWSGI和gunicorn等库。相比那些库,python内部提供了一个wsgiref模块,实现了一个简单wsgi服务--simple_server。

接下来将会通过分析simple_server,更好的掌握WSGI协议。

总结网络IO模型与select模型的Python实例讲解 网络I/O模型人多了,就会有问题。web刚出现的时候,光顾的人很少。近年来网络应用规模逐渐扩大,应用的架构也需要随之改变。Ck的问题,让工程师

Python的Flask框架及Nginx实现静态文件访问限制功能 Nginx配置Ngnix,一个高性能的web服务器,毫无疑问它是当下的宠儿。卓越的性能,灵活可扩展,在服务器领域里攻城拔寨,征战天下。静态文件对于大多

Python的string模块中的Template类字符串模板用法 string.Template()string.Template()内添加替换的字符,使用"$"符号,或在字符串内,使用"${}";调用时使用string.substitute(dict)函数.可以通过继承"string.Template",覆盖变量d

标签: python simple

本文链接地址:https://www.jiuchutong.com/biancheng/387648.html 转载请保留说明!

上一篇:Python的Tornado框架的异步任务与AsyncHTTPClient(python tornado框架)

下一篇:总结网络IO模型与select模型的Python实例讲解(总结网络io模型的特点)

  • 支付境外劳务费需要缴纳哪些税费
  • 房产税的纳税义务
  • 金蝶专业版怎么导入备份账套
  • 商品涉及商业折扣的,如何确认企业所得税的销售收入?
  • 普通发票与增值税发票的图片
  • 个人股权转让协议书范本合同
  • 税务筹划有哪些内容
  • 高新技术企业外债便利化
  • 房租费用在本年内可以不摊销吗?
  • 固定资产账载金额和税收金额的区别
  • 研发项目领原料加工成产品会计处理是怎样的?
  • 小微企业分公司 企业所得税优惠
  • 合伙企业个人所得税经营所得税率
  • 金税盘开票怎么改成含税金额
  • 外籍人员个人所得税政策
  • 机打发票领回怎么录入
  • 管理费用属于什么现金流量项目
  • 期末未缴税额为正是什么意思
  • 矿产资源补偿费征收管理规定
  • 递延所得税资产是什么
  • 租赁设备发票备注栏怎么填写
  • 公司为员工承担房租
  • 银行电子承兑如何撤回
  • 如何从零开始制作地下偶像
  • 替换重置的设备更新应考虑
  • 小型微利企业所得税率
  • 土地补偿款会议记录范文
  • 怎么更新电脑系统win10
  • linux设置用户密码
  • Windows操作系统出现内存错误解决方法
  • fatal error: opencv/cv.h: 没有那个文件或目录 错误;fatal error: opencv2/contrib/contrib.hpp: 没有那个文件或目录,opencv多版本
  • 先买入再卖出
  • 工会经费可以提出来使用吗
  • 支付属于借方吗?
  • 怎么让gridview居中
  • 工程项目成本核算的依据主要有
  • 微信小程序最新咸鱼之王兑换
  • 哪些计入其他收益与营业外收入
  • 公司的基本户怎么换
  • 上期金额是本年累计金额吗
  • 供应商发票多开了如何处理?
  • 开票只开大类
  • 普票要盖发票的章子吗
  • 2023小型微利企业税收优惠
  • 增值税专用发票的税率是多少啊
  • 简易计税项目税率
  • 计提借款利息怎么算
  • 弱电工程怎么入账
  • 固定资产入账要发票吗
  • 客户重复付款了怎么礼貌回复
  • 小规模发票跨月冲红税款可以退回吗
  • 转让厂房如何缴纳土地增值税
  • 明细分类账的格式与登记方法
  • 应付账款怎么做平
  • MySQL利用视图查询员工进货数量要求输出姓名进货数量
  • Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程
  • 微软windows 10
  • win7系统分辨率调整不了
  • linux的用户
  • win8.1的开始菜单在哪
  • winxp回收站清空了怎么恢复
  • sixtypopsix.exe - sixtypopsix是什么进程 有什么用
  • win8系统中向日葵软件造成的屏幕亮度无法调节怎么办?
  • Linux Shell 通配符、元字符、转义符使用实例介绍
  • 信佛是信教吗
  • windows7出现错误恢复怎么办
  • Win8系统怎么安装
  • Win10系统怎么截图快捷键
  • linux ftp创建文件夹命令
  • 微信小程序自动跳转怎么关闭
  • jquery插件是干什么的
  • 输出语句的执行过程
  • python3并发
  • unity system
  • Android - DrawerLayout的使用
  • 深入理解新发展理念心得体会3篇
  • jquery查找当前元素的父元素
  • Android boot.img制作
  • 为什么电子发票没有监制章
  • 居住证在粤省事怎么查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设