python高级-socket和web相关(下)

简介: python高级-socket和web相关(上)

二、静态web

1.请求报文

2.响应头

响应码

3.静态web服务器

python3 -m http.server

http://127.0.0.1:8000/index1.html

http://0.0.0.0:8000/

4.socket静态页面

import socket
if __name__ == '__main__':
    #创建tcp服务端套接字
    tcp_serv_s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #设置端口号复用
    tcp_serv_s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    #端口绑定
    tcp_serv_s.bind(("",9000))
    #设置监听
    tcp_serv_s.listen(128)
    while True:
        #等待接受客户端的连接请求
        new_socket,ip_port = tcp_serv_s.accept()
        #代码执行到此,说明连接建立成功
        recv_c_d = new_socket.recv(4096)
        #对接收的客户端的请求包头进行二进制解码
        recv_c_con = recv_c_d.decode("utf-8")
        print(recv_c_con)
        with open("./index1.html",'rb') as f:
            f_d = f.read()
        #相应行
        response_l = "HTTP/1.1 200 OK\r\n"
        #响应头
        response_h = "Server: PWS1.0\r\n"
        #响应体
        response_b = f_d
        #拼接响应报文
        res_d = (response_l+response_h+"\r\n").encode("utf-8") + response_b
        #发送数据
        new_socket.send(res_d)
new_socket.close()

5.多进程模拟404和200状态码

import multiprocessing
import socket
def serv_start(port):
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    server.bind(("",port))
    server.listen(128)
    while True:
        client,ip_port = server.accept()
        print(f"客户端{ip_port[0]} 使用{ip_port[1]} 端口连接成功")
        p = multiprocessing.Process(target=task,args=(client,))
        p.start()
    server.close()
def task(client):
    request_data = client.recv(1024).decode('utf-8')
    if len(request_data) == 0:
        client.close()
    else:
        request_path = request_data.split(' ')[1]
        print("请求地址是: ",request_path)
        print("request:  ",request_path)
        if request_path == '/':
            request_path = 'index1.html'
        try:
            with open('./'+request_path,'rb') as f:
                file_con = f.read()
        except Exception as e:
            response_line = "HTTP/1.1 404 NOT FOUND\r\n"
            response_head = "Server: PSWS1.1\r\n"
            with open('./err.html','rb') as f:
                error_data = f.read()
            response_data = (response_line+response_head+'\r\n').encode('utf-8') + error_data
            client.send(response_data)
        else:
            response_line = "HTTP/1.1 200 OK\r\n"
            response_head = "Server: PSWS1.1\r\n"
            with open('./'+request_path,'rb') as f:
                response_body = f.read()
            response_data = (response_line+response_head+'\r\n').encode() + response_body
            client.send(response_data)
        finally:
            client.close()
if __name__ == '__main__':
    serv_start(7777)

6.面向对象多任务

import multiprocessing
import socket
class server_start(object):
    def __init__(self,port):
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        self.server.bind(("", port))
        self.server.listen(128)
    def start(self):
        while True:
            client,ip_port = self.server.accept()
            print(f"客户端{ip_port[0]} 使用{ip_port[1]} 端口连接成功")
            p = multiprocessing.Process(target=self.task,args=(client,))
            p.start()
        self.server.close()
    def task(self,client):
        request_data = client.recv(1024).decode('utf-8')
        if len(request_data) == 0:
            client.close()
        else:
            request_path = request_data.split(' ')[1]
            print("请求地址是: ",request_path)
            print("request:  ",request_path)
            if request_path == '/':
                request_path = 'index1.html'
            try:
                with open('./'+request_path,'rb') as f:
                    file_con = f.read()
            except Exception as e:
                response_line = "HTTP/1.1 404 NOT FOUND\r\n"
                response_head = "Server: PSWS1.1\r\n"
                with open('./err.html','rb') as f:
                    error_data = f.read()
                response_data = (response_line+response_head+'\r\n').encode('utf-8') + error_data
                client.send(response_data)
            else:
                response_line = "HTTP/1.1 200 OK\r\n"
                response_head = "Server: PSWS1.1\r\n"
                with open('./'+request_path,'rb') as f:
                    response_body = f.read()
                response_data = (response_line+response_head+'\r\n').encode() + response_body
                client.send(response_data)
            finally:
                client.close()
if __name__ == '__main__':
    server_start(7777).start()


结语

点赞👍

相关文章
|
7天前
|
Python
python socket 简单通信
python socket 简单通信
20 1
|
11天前
|
数据采集 机器学习/深度学习 数据可视化
【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法
本文介绍了一个基于Python的全国招聘数据分析可视化系统,该系统利用数据挖掘技术、随机森林算法和数据可视化技术,从招聘网站抓取数据,进行处理、分析和预测,帮助用户洞察招聘市场,为求职者和企业提供决策支持。
|
3天前
|
分布式计算 网络协议 Python
Python网络编程:socket编程
Socket 编程是网络编程的重要部分,主要用于在不同计算机之间进行通信。Python 提供了一个非常强大的 socket 库,使得网络编程变得简单和灵活。本篇博文将详细介绍 Python 的 socket 编程,包括基础概念、核心组件、常用功能,并附上一个综合的示例及其运行结果。
|
3天前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
13 1
|
11天前
|
数据采集 数据可视化 关系型数据库
【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术采集电影数据,利用数据分析库进行处理,并使用Echart进行数据的可视化展示,以提供全面、准确的电影市场分析结果。
|
3天前
|
SQL 前端开发 关系型数据库
Python之Web框架Django
Python之Web框架Django
7 0
|
4天前
|
设计模式 API Python
Python Web:Django、Flask和FastAPI框架对比
Python Web:Django、Flask和FastAPI框架对比
13 0
|
18天前
|
开发框架 缓存 前端开发
基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求
基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求
|
20天前
|
安全 IDE 编译器
深入理解PHP 7的新特性及其对现代Web开发的影响
【7月更文挑战第30天】本文将深入探索PHP 7版本中引入的关键新特性,并分析这些改进如何优化现代Web开发实践。通过对比PHP 5和PHP 7的性能差异,我们将揭示PHP 7如何提升应用响应速度和资源利用效率。此外,本文还将讨论PHP 7对开发者工作流程的影响,包括新的语言特性、错误处理机制以及内置函数的增强,旨在为读者提供全面了解PHP 7所带来的变革性影响。

热门文章

最新文章