python的socket编程入门
作者:laozhang 发布时间:2022-11-01 07:33:12
标签: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监听连接,解析请求,返回请求对应的内容。后续只要去处理解析请求和响应部分即可,主程序可以不用再修改。
来源:https://segmentfault.com/a/1190000013030891


猜你喜欢
- 本篇博客参考:1)DEM generation from laser scanner data using adaptive TIN mod
- 该域名查询系统写的很简单,只是实现了功能使用XmlHttp来获取远程查询结果,实际上就是小偷程序!相关推荐:域名注册情况查询/
- 1: os.listdir(path) //path为目录 功能相当于在path目录下执行dir命令,返回为list类型 print os.
- composer是PHP中非常优秀的一个包管理工具,可以帮助我们来管理项目所需要依赖的所有包以及插件,也可以用来从packagist中创建一
- 本文实例为大家分享了python提取英语pdf内容并翻译的具体代码,供大家参考,具体内容如下前期准备工作:翻译接口: 调用的是百度翻译的ap
- 使用环境 C#VSCodeM11. 安装MySQL下载MySQL软件,傻瓜式安装即可,安装完之后,在系统偏好号设置里会出现一个My
- 1、打开文件open()函数简介 :打开文件使用open函数,可以打开一个已经存在的文件,如果没有这个文件的话,会创建一个新文件完整的语法格
- 如下所示:import numpy as npfrom torchvision.transforms import Compose, ToT
- PDO::setAttributePDO::setAttribute — 设置属性(PHP 5 >= 5.1.0, PECL pdo
- 本文实例讲述了php设计模式之适配器模式。分享给大家供大家参考,具体如下:星际的很多兵种,都有至少一项特殊技能。而且有些兵种的技能是相同的,
- 单神经元引论对于如花,大美,小明三个因素是如何影响小强这个因素的。这里用到的是多元的线性回归,比较基础from numpy import a
- 前言count函数是用来统计表中或数组中记录的一个函数,count(*) 它返回检索行的数目, 不论其是否包含 NULL值。最近感觉大家都在
- 本文从树数据结构说到二叉堆数据结构,再使用二叉堆的有序性对无序数列排序。1. 树树是最基本的数据结构,可以用树映射现实世界中一对多的群体关系
- 需要ocr识别,推荐一个Python免费的验证码识别-ddddocr安装过程:1、镜像安装:pip install ddddocr -i h
- 目录1 简介2 在Dash中实现文件上传与下载2.1 在Dash中配合dash-uploader实现文件上传2.1.1
- 操作命令:show binlog events in 'mysql-bin.000016' limit 10;reset m
- 有一个 Selenium 脚本(Python),它点击回复按钮使anonemail类出现。anonemail 类出现的时间各不相同。因此,我
- 本文实例讲述了Flask框架请求钩子与request请求对象。分享给大家供大家参考,具体如下:请求钩子在客户端和服务器交互的过程中,有些准备
- 一、前言我想介绍这些功能的主要原因是它们可以帮助您避免编写循环。在某些情况下,循环运行可能会很昂贵,除此之外,这些功能将有助于提高速度。以下
- 引言在前端开发的工作当中,使用 npm run dev 的命令启动本地开发环境,是再正常不过的事了。那么,当输入完类似 npm run xx