python的socket编程入门

 更新时间:2018年01月29日 13:35:42   投稿:laozhang  
本篇文章是一篇关于python的socket编程入门教程,如果你也正好需要这方面的内容,学习下吧。

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 获取当前目录下的文件目录和文件名实例代码详解

    这篇文章主要介绍了python 获取当前目录下的文件目录和文件名实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python字符与ASCII码相互转换方法

    Python字符与ASCII码相互转换方法

    在做python编程时,碰到了需要将字母转换成ascii码的需求,所以下面这篇文章主要给大家介绍了关于Python字符与ASCII码相互转换的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)

    Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)

    conda的设计理念——conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身!因此,conda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package并方便地切换
    2018-04-04
  • Python Queue模块详细介绍及实例

    Python Queue模块详细介绍及实例

    这篇文章主要介绍了Python Queue模块详细介绍及实例的相关资料,需要的朋友可以参考下
    2016-12-12
  • python include标签的使用方式及说明

    python include标签的使用方式及说明

    这篇文章主要介绍了python include标签的使用方式及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 在Python中使用PIL模块对图片进行高斯模糊处理的教程

    在Python中使用PIL模块对图片进行高斯模糊处理的教程

    这篇文章主要介绍了在Python中使用PIL模块对图片进行高斯模糊处理的教程,这个无图形界面的脚本代码非常简单,需要的朋友可以参考下
    2015-05-05
  • python中停止线程的几种常用方法

    python中停止线程的几种常用方法

    这篇文章主要介绍了python中停止线程的几种常用方法,在Python中停止线程没有直接方法,但可以通过标志变量、守护线程或抛出异常来实现,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • Anaconda详细安装步骤图文教程

    Anaconda详细安装步骤图文教程

    这篇文章主要介绍了Anaconda详细安装步骤图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python 描述符(Descriptor)入门

    Python 描述符(Descriptor)入门

    本文给大家介绍的是Python中比较重要的一个知识点--描述符(Descriptor),描述符(descriptor)是Python语言核心中困扰我时间最长的一个特性,但是一旦你理解了之后,描述符的确还是有它的应用价值的。
    2016-11-11
  • Python实战之实现百度智能图片识别

    Python实战之实现百度智能图片识别

    这篇文章主要介绍了如何利用Python编写一个百度智能图片识别项目,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下
    2022-01-01

最新评论