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中的面向对象编程详解(下)
Apr 13 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
Oct 16 Python
pandas DataFrame索引行列的实现
Jun 04 Python
在Python中表示一个对象的方法
Jun 25 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
python之随机数函数的实现示例
Dec 30 Python
python状态机transitions库详解
Jun 02 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&amp;&amp;mysql)四
2006/10/09 PHP
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
基于jQuery的倒计时实现代码
2012/05/30 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
python列表与元组详解实例
2013/11/01 Python
Python contextlib模块使用示例
2015/02/18 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
房地产开盘策划方案
2014/02/10 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
学子宴致辞大全
2015/07/27 职场文书
大学副班长竞选稿
2015/11/21 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫