首页 编程教程正文

python 多线程实现简易 web服务器

piaodoo 编程教程 2020-02-22 22:14:33 1313 0 python教程

本文来源吾爱破解论坛

这是一个简单的web服务器, 通过socket下的tcp和python多线程实现。
没有足够的功能, 只能作为一个了解bs模式的样例。

运行:
打开浏览器,输入“localhost:1027”,即可。(首先打开服务器)
[Python] 纯文本查看 复制代码

import  socket
import  re
import  threading

'''
    多线程实现web服务器:
        # 1、新建线程;
        # 2、在新线程中关闭套接字
        
        # 注:线程资源复制,套接字关闭一个就行    

'''

def response(new_socket):
    data  =  new_socket.recv(1024).decode("utf-8").splitlines()

    print("请求: ")
    for item in  data:
        print(item)

    ret  = re.search(r'[^/]+(/[^ ]*)',  data[0])

    print(ret)
    if ret:
        file_name = ret.group(1)
        # print("*"*50, file_name)
        if file_name == "/":
            file_name = "/index.html"


    # 2. 返回http格式的数据,给浏览器

    try:
#  网页文件的路径自己设置
        f = open("F:/code/python/tmp/web/HTML家政服务公司网站模板" + file_name, "rb")
    except:
        response = "HTTP/1.1 404 NOT FOUND\r\n"
        response += "\r\n"
        response += "------file not found-----"
        new_socket.send(response.encode("utf-8"))
    else:
        html_content = f.read()
        f.close()
        # 2.1 准备发送给浏览器的数据---header
        response = "HTTP/1.1 200 OK\r\n"
        response += "\r\n"
        # 2.2 准备发送给浏览器的数据---boy
        # response += "hahahhah"

        # 将response header发送给浏览器
        new_socket.send(response.encode("utf-8"))
        # 将response body发送给浏览器
        new_socket.send(html_content)
        # 新进程中关闭套接字
        new_socket.close()

def main():

    # 初始化套接字
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server.setsockopt(socket.SOL_SOCKET,   socket.SO_REUSEADDR, 1)
    # 1、绑定端口
    tcp_server.bind( ('',1027))
    # 2、设置监听
    tcp_server.listen(128)

    while True:
        # 3、等待接收
        new_server,  client_adder = tcp_server.accept()
        #4、响应
        threading.Thread( target= response,args=(new_server,)).start()
        #5、关闭新套接字------此处关闭会导致新套接字无法正常使用
        #new_server.close()
    # 6、关闭服务器套接字
    tcp_server.close()

if  __name__ == "__main__":
    main()


版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7895.html

搜索