基于Python+socket编程实现的简单的WebServer

本文介绍了如何使用Python的socket库创建一个简单的WebServer,通过解析客户端请求并返回相应数据。项目包含静态文件和模板文件,如html,以及各个功能模块的Python代码。
摘要由CSDN通过智能技术生成

基于Python+socket编程实现的简单的WebServer

通过解析客户端向服务端发送的请求数据: receiveMsg=self.__connection.recv(self.__bufferSize)。
来向客户端返回相应的请求数据


文件布局
  • pymsgi
    • static(存放照片等文件)
    • templates(存放html文件,下列为包含文件)
      • error.html
      • index.html
      • main.html
    • application.py
    • request.py
    • response.py
    • runserver.py

以下为代码实现

#application.py代码实现
from socket import *
import threading
from response import HttpResponse
from request import HttpRequest
#WSGI服务器
class WSGIServer():

    def __init__(self,host='localhost',port=9090,connectSize=100):
        '''

        :param port: 服务器的端口号
        :param connectSize:默认的并发数量
        '''
        self.__host=host
        self.__port=port
        self.__connectSize=connectSize
        pass

    def startServer(self):
        '''
        服务器启动主程序
        :return:
        '''
        server=None
        try:
            server=socket(AF_INET,SOCK_STREAM)
            server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
            server.bind((self.__host,self.__port))
            server.listen(self.__connectSize)
            while True:
                print("++++++++++++服务器启动成功:http://"+self.__host+":"+str(self.__port))
                clientConn,clientAddr=server.accept()
                #定义独立的线程,处理每一个用户请求
                wt=WorkThread(clientConn,clientAddr)
                wt.start()
                pass
        except socket.gaierror as g:
            print(g)
            pass
        finally:
            pass
        pass

    pass


class WorkThread(threading.Thread):
    def __init__(self,connection,addr,bufferSize=8096):
        threading.Thread.__init__(self)
        self.__connection=connection
        self.__addr=addr
        self.__bufferSize=bufferSize
    def run(self):
        #while True:    #保持长连接
        receiveMsg=self.__connection.recv(self.__bufferSize)
        receiveMsg=receiveMsg.decode('utf-8')
        print(receiveMsg)
        request=HttpRequest(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值