python的socket编程入门


Posted in Python onJanuary 29, 2018

Flask或者其他框架都是封装的比较完善,我们可以不去关注路由、SESSION等到底是怎么实现的,现在我们使用socket来实现一个带有注册、登录功能的To do网站,这样能对后端框架了解的稍微更深入一点(当然你也可以直接去看Flask源码)。

主程序runserver.py代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
from exts import Request
from route import response_for_request
from datetime import datetime
def run_server(host='', port=1207):
  # 建立一个socket.socket()类s
  with socket.socket() as s:
    # 设置s在服务端关闭后马上释放端口,避免Address already in use错误
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # 绑定host和port
    s.bind((host, port))
    while 1:
      # 开始监听传入连接,可以挂起的最大连接数为5
      s.listen(5)
      # 接受连接,根据buffer_size不断读取内容
      connection, address = s.accept()
      r = ''
      buffer_size = 1024
      while 1:
        data = connection.recv(1024).decode('utf-8')
        r += data
        if len(data) < buffer_size:
          break
      # 防止浏览器传空请求过来
      if len(r.split()) < 2:
        continue
      # 最后取得的r是一个http请求头字符串,对其解析,然后使用sendall返回相应的内容 
      request = Request(r)
      # 每次请求时打印时间,请求的方法和路径
      print(str(datetime.now())[:19], request.method, request.path)
      response = response_for_request(request)
      connection.sendall(response)
      connection.close()
if __name__ == '__main__':
  run_server()

run_server函数代码的简单说明可以看注释;from exts import Request:从exts导入一个Request类,这个Request类是自己编写的,用于解析http请求头,这部分是很简单的,在网上搜索http请求相关内容,就可以自行写一个,包括返回请求头的路径、方法、各个字段以及body部分等,都是字符串相关的操作。

from route import response_for_request:从route.py导入相应函数,即传入一个上一步中的Request类,返回对应的网页内容,具体实现将在后续讲解。

可以说,主程序就已经编写好了,整个逻辑也很简单,使用socket监听连接,解析请求,返回请求对应的内容。后续只要去处理解析请求和响应部分即可,主程序可以不用再修改。

Python 相关文章推荐
Python群发邮件实例代码
Jan 03 Python
Python使用py2exe打包程序介绍
Nov 20 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
python实现二叉树的遍历
Dec 11 Python
python中metaclass原理与用法详解
Jun 25 Python
pandas如何处理缺失值
Jul 31 Python
python右对齐的实例方法
Jul 05 Python
Python+Kepler.gl实现时间轮播地图过程解析
Jul 20 Python
Python实现手绘图效果实例分享
Jul 22 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
Python实现学生管理系统(面向对象版)
Jun 24 Python
Python 错误和异常代码详解
Jan 29 #Python
python实现机器人行走效果
Jan 29 #Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 #Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 #Python
详解Python自建logging模块
Jan 29 #Python
python抓取网页中链接的静态图片
Jan 29 #Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 #Python
You might like
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
jquery.validate使用详解
2016/06/02 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
python中文编码问题小结
2014/09/28 Python
Python将图片转换为字符画的方法
2020/06/16 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
Python中super函数用法实例分析
2019/03/18 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
Pytorch的mean和std调查实例
2020/01/02 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
Python os库常用操作代码汇总
2020/11/03 Python
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
毕业生自我鉴定
2013/11/05 职场文书
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
企业元宵节主持词
2014/03/25 职场文书
党的群众路线调研报告
2014/11/03 职场文书
高中生毕业评语
2014/12/30 职场文书
齐云山导游词
2015/02/06 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python