python的socket编程入门

作者:laozhang 时间:2022-11-01 07:33:12 

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

标签:python,socket
0
投稿

猜你喜欢

  • Python冲顶大会 快来答题!

    2022-05-27 08:10:56
  • Sql Server 2008完全卸载方法(其他版本类似)第1/2页

    2024-01-14 01:20:09
  • Python基础之文件操作及光标移动详解

    2022-12-01 02:23:17
  • Oracle使用PL/SQL操作COM对象

    2010-07-21 12:56:00
  • Python 实现子类获取父类的类成员方法

    2022-01-14 00:28:17
  • mysql分表和分区的区别浅析

    2024-01-23 13:43:16
  • Python面向对象之继承代码详解

    2022-03-11 03:04:24
  • MYSQL--自身字段约束级联删除

    2010-11-02 11:42:00
  • Python中3种内建数据结构:列表、元组和字典

    2022-12-20 03:46:04
  • python3+PyQt5实现支持多线程的页面索引器应用程序

    2022-02-17 02:02:11
  • Python实现定时任务的八种方案详解

    2022-04-19 06:54:03
  • python使用socket远程连接错误处理方法

    2023-05-13 04:56:48
  • sqlserver 数据库连接字符串中的可选项收集

    2024-01-16 17:47:31
  • Python实现分割文件及合并文件的方法

    2022-01-28 00:02:02
  • python使用matplotlib绘制折线图教程

    2022-06-28 11:26:37
  • python读写删除复制文件操作方法详细实例总结

    2022-07-29 05:58:56
  • Python多进程模式实现多核CPU并行计算

    2022-12-01 21:26:20
  • 整理的比较全的一句话后门代码(方面大家查找后门)

    2023-06-17 18:30:29
  • Python实例练习水仙花数问题讲解

    2023-05-26 18:38:11
  • 浅析php header 跳转

    2023-10-15 04:18:34
  • asp之家 网络编程 m.aspxhome.com